Mic*_*hal 5 python database sqlite foreign-keys peewee
我在 Python 中使用 ORM peewee来实现 sqlite。我想创建一个表,其中的Item
字段parent_id
将作为外键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])
Run Code Online (Sandbox Code Playgroud)
但是,由于循环外键,出现错误:
NameError:在封闭范围内赋值之前引用了自由变量“Item”
DeferredForeignKey
对于这种情况, peewee中有:
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)
Run Code Online (Sandbox Code Playgroud)
不幸的是,sqlite中没有ADD CONSTRAINT
,所以出现另一个错误:
peewee.OperationalError:靠近“CONSTRAINT”:语法错误
有没有办法使用 peewee 在 sqlite 中创建循环外键,或者我必须使用纯整数而不是外键或使用本机 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
Run Code Online (Sandbox Code Playgroud)
您不需要弄乱任何延迟的密钥或任何东西。
归档时间: |
|
查看次数: |
1487 次 |
最近记录: |