我已经搜索过,这里没有问题可以解决。我在迁移过程中定义了一些表,例如
from playhouse.migrate import *
db = MySQLDatabase('mydb', 'root', 'password', 'localhost', 3306)
migrator = MySQLMigrator(db)
id_field = IntegerField(null=False, unique=True, index=True, primary_key=True)
fk_field = IntegerField(null=False)
with db.atomic():
migrate(
migrator.add_column('my_table', 'id', id_field)
)
with db.atomic():
migrate(
migrator.add_column('my_table1', 'id', id_field)
migrator.add_column('my_table1', 'table_id', fk_field) # this needs to be marked as a foreign key constraint somehow?
)
但是,文档非常不清楚如何在迁移中指定外键约束。 ForeignKeyField似乎需要一个我没有的模型。
在迁移中是否可以指定table_id
是与my_table
id字段相关的外键?您可以在标准SQL中使用FOREIGN KEY table_id REFERENCES my_table(id)
进行此操作。
我很茫然,我将放弃对SQL的迁移,因为peewee的文档并没有真正弄清楚这一点。我不使用Django-我只是在peewee上添加了我拥有的一些脚本。
我可以采取什么措施来解决此问题,以便迁移完全定义我的模型?
答案 0 :(得分:0)
如果您要向模型“没有”添加外键,则有两种方法。您可以创建一个存根模型以充当外键目标的占位符,然后使用add_column()
调用ForeignKeyField
。或者,您可以在IntegerField()
中明确指定约束列表:
field = IntegerField(..., constraints=[SQL('foreign key references foo(bar)')])