我有以下SQLAlchemy模型。它已成功迁移到数据库:
class MyClassA(db.Model, Timestamp):
a_id = db.Column(db.Integer, nullable=False, primary_key=True)
b_id = db.Column(db.Integer, db.ForeignKey(C.c_id), nullable=False)
d = db.Column(db.String(1024))
e_id = db.Column(db.Integer,
db.ForeignKey(e.e_id))
现在我想在第二个和第四个字段中添加唯一性约束。所以我将以下行添加到模型中:
__table_args__ = db.UniqueConstraint('b_id', 'e_id', name='unique_constraint_bid_eid')
但是现在当我尝试迁移它时,我收到以下错误:
sqlalchemy.exc.ArgumentError: __table_args__ value must be a tuple, dict, or None
为什么我收到此错误?我该如何解决?我尝试将等式的右边放在括号中,但这并没有解决它。
答案 0 :(得分:5)
table_args 应该是错误代码建议的元组,字典或无。如果你把它变成一个元组,那么你必须把你的值放在括号中,最后还有一个逗号:
尝试:
__table_args__ = (db.UniqueConstraint('b_id', 'e_id', name='unique_constraint_bid_eid'), )
答案 1 :(得分:1)
表参数。此属性可容纳通常发送到Table构造函数的位置参数和关键字参数。可以两种形式之一指定属性。一个是作为字典:
class MyClass(Base):
__tablename__ = 'sometable'
__table_args__ = {'mysql_engine':'InnoDB'}
enter code here
另一个是元组,其中每个参数都是位置参数(通常是约束条件):
class MyClass(Base):
__tablename__ = 'sometable'
__table_args__ = (
ForeignKeyConstraint(['id'], ['remote_table.id']),
UniqueConstraint('foo'),
)
可以通过将最后一个参数指定为字典来以上述形式指定关键字参数:
class MyClass(Base):
__tablename__ = 'sometable'
__table_args__ = (
ForeignKeyConstraint(['id'], ['remote_table.id']),
UniqueConstraint('foo'),
{'autoload':True}
)