Python 将两列设置为外键引用SQLAlchemy中的两个主键
我正在用烧瓶炼金术。我对如何将两列设置为外键引用两个主键感到困惑Python 将两列设置为外键引用SQLAlchemy中的两个主键,python,sqlite,sqlalchemy,flask-sqlalchemy,Python,Sqlite,Sqlalchemy,Flask Sqlalchemy,我正在用烧瓶炼金术。我对如何将两列设置为外键引用两个主键感到困惑 类特征(db.Model): __tablename_uu='feature' id=db.Column(整数,主键=True) sample\u id=db.Column(整数,ForeignKey('sample.id'),primary\u key=True) 类移动(db.Model): __tablename_uu='move' id=db.Column(整数,主键=True,自动递增=True) feature_id=
类特征(db.Model):
__tablename_uu='feature'
id=db.Column(整数,主键=True)
sample\u id=db.Column(整数,ForeignKey('sample.id'),primary\u key=True)
类移动(db.Model):
__tablename_uu='move'
id=db.Column(整数,主键=True,自动递增=True)
feature_id=db.Column(整数,ForeignKey(feature.id),nullable=False)
sample\u id=db.Column(整数,ForeignKey(Feature.sample\u id),nullable=False)
__表参数=(
db.UniqueConstraint('feature_id','sample_id'),
)
我尝试了几种配置,但当我尝试插入某些内容时,我得到了:
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) foreign key mismatch - "move" referencing "feature"
事实上,create语句是错误的:
创建表移动(
id整数不为空,
特征id整数不为空,
样本id整数不为空,
主键(id),
唯一(特征标识、样本标识),
外键(特征id)引用特征(id),
外键(示例id)引用功能(示例id)
)
最后一行应该是:
外键(feature\u id,sample\u id)引用feature(id,sample\u id)
最后,我找到了一个解决方案
工作守则是:
class Move(db.Model):
__tablename__ = 'move'
id = db.Column(Integer, primary_key=True, autoincrement=True)
feature_id = db.Column(Integer)
sample_id = db.Column(Integer)
__table_args__ = (ForeignKeyConstraint([feature_id, sample_id],
[Feature.id, Feature.sample_id]), {})