gpt4 book ai didi

python - Python Peewee 中同一张表的外键

转载 作者:行者123 更新时间:2023-12-04 13:16:26 30 4
gpt4 key购买 nike

我正在使用 ORM peewee对于 Python 中的 sqlite。我想用字段 parent_id 创建表 Item,它将成为 Item 的外键:

from peewee import *

db = SqliteDatabase("data.db")

class Item(Model):
id = AutoField()
parent_id = ForeignKeyField(Item, null = True)

class Meta:
database = db

db.create_tables([Item])

但是由于循环外键出现错误:

NameError: free variable 'Item' referenced before assignment in enclosing scope

对于这种情况,peewee中有DeferredForeignKey:

from peewee import *

db = SqliteDatabase("data.db")

class Item(Model):
id = AutoField()
parent_id = DeferredForeignKey("Item", null = True)

class Meta:
database = db

db.create_tables([Item])
Item._schema.create_foreign_key(Item.parent_id)

不幸的是,sqlite中没有ADD CONSTRAINT,所以又出现了一个错误:

peewee.OperationalError: near "CONSTRAINT": syntax error

有什么方法可以使用 peewee 在 sqlite 中创建循环外键,或者我必须使用普通整数而不是外键或使用 native SQL 而不是 ORM?

最佳答案

这被记录得非常清楚:http://docs.peewee-orm.com/en/latest/peewee/models.html#self-referential-foreign-keys

你只需将 'self' 作为标识符:

class Item(Model):
id = AutoField()
parent = ForeignKeyField('self', backref='children', null=True)

class Meta:
database = db

你不需要弄乱任何延迟键或任何东西。

关于python - Python Peewee 中同一张表的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59944653/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com