Имам таблица, за която смених 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)
Тъй като промених двигателя на InnoDB, външните ключове се създават, което не е желано. Проблемът е, че SQLAlchemy използва дефинициите на външния ключ, за да дефинира връзките на връзката.
Има ли начин да се предотврати създаването на външни ключове или да се дефинират връзките без добавяне на външни ключове?