【问题标题】:Peewee Migration - Foreign key constraint?Peewee 迁移 - 外键约束?
【发布时间】:2018-08-12 09:07:47
【问题描述】:

我已经搜索过,这里没有任何问题可以解决这个问题。我在迁移中定义了一些表,如下所示 -

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

我可以做些什么来解决这个问题,以便迁移完全定义我的模型?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 1970-01-01
      • 2018-04-05
      • 2013-09-10
      • 1970-01-01
      • 2016-01-20
      • 2014-05-02
      • 2019-03-24
      相关资源
      最近更新 更多