Peewee迁移-外键约束?

时间:2018-08-12 09:07:47

标签: python python-3.x foreign-keys peewee

我已经搜索过,这里没有问题可以解决。我在迁移过程中定义了一些表,例如

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上添加了我拥有的一些脚本。

我可以采取什么措施来解决此问题,以便迁移完全定义我的模型?

1 个答案:

答案 0 :(得分:0)

如果您要向模型“没有”添加外键,则有两种方法。您可以创建一个存根模型以充当外键目标的占位符,然后使用add_column()调用ForeignKeyField。或者,您可以在IntegerField()中明确指定约束列表:

field = IntegerField(..., constraints=[SQL('foreign key references foo(bar)')])