У меня есть таблица, для которой я изменил механизм MySQL от MyISAM до InnoDB. Это единственная таблица, которая была изменена, связанные с ней таблицы по-прежнему используют MyISAM.Определить отношения без фактического создания внешних ключей
class Signals(Base, sql_functions):
__tablename__ = 'Signals'
def __init__(self, message_id=None, clip_id=None, signal_id=None):
self.message_id = message_id
self.clip_id = clip_id
self.signal_id = signal_id
__table_args__ = {
'mysql_engine': 'InnoDB',
'mysql_charset': 'utf8'
}
__mapper_args__= {'always_refresh': True}
id = Column(Integer(10), primary_key=True)
message_id = Column(Integer(10), ForeignKey('Messages.id'))
clip_id = Column(Integer(10), ForeignKey('Clips.id'))
signal_id = Column(Integer(10), ForeignKey('Signal_names.id'), primary_key=True)
sig_name = relationship("SignalNames", backref=backref('Signals', order_by=id), primaryjoin = 'Signals.signal_id == SignalNames.id', foreign_keys='SignalNames.id')
clips = relationship("Clips", backref=backref('Signals', order_by=id), primaryjoin='Signals.clip_id == Clips.id', foreign_keys='Clips.id')
messages = relationship("Messages", backref=backref('Signals', order_by=id), primaryjoin='Signals.message_id == Messages.id', foreign_keys='Messages.id')
def __repr__(self):
return "<Signals ('%s %s %s')>" % (self.message_id, self.clip_id)
Index('idx_msg_id', Signals.message_id)
Поскольку я изменил Engine на InnoDB, внешние ключи создаются, что нежелательно. Проблема в том, что SQLAlchemy использует определения внешнего ключа для определения отношений.
Есть ли способ предотвратить создание внешних ключей или определить отношения без добавления внешних ключей?
Почему вы хотите, чтобы предотвратить создание внешних ключей? –
@SlaterTyranus Я не использую MySQL, поэтому я не могу быть уверен, но это может иметь какое-то отношение к микшированию MyISAM и InnoDB. – davidism
@SlaterTyranus, потому что любая из подключенных таблиц - myIsam, и я не могу их изменить далее. Эта таблица огромна, и я использую разделы, и вы можете использовать разделы, если у вас есть FK. –