我正在尝试使用 peewee 设置数据库 ORM,但不清楚外键关系的使用。
from peewee import *
db = SqliteDatabase('datab.db')
class datab(Model):
class Meta:
database = db
class Collection(datab):
identifier = CharField()
title = CharField()
class File(datab):
identifier = ForeignKeyField(Collection, related_name='files')
name = CharField()
后来,我导入了“Collections”
for value in collection:
Collection(**value).save()
最后,我遇到问题的地方是将文件添加到集合中
for value in collectionFiles:
File(**value).save()
在 value dict 中,有一个关键字对,关键字为“identifier”,一个值应该与 Collection 标识符关键字相关联。
但是我收到一条错误消息:
ValueError: invalid literal for int() with base 10: 'somevalue'
如果我将 File(datab): identifier Type 更改为 VarChar,它会保存数据。
我意识到我做错了。我的假设是每个表中的唯一标识符值将应用外键。阅读文档后,看起来外键设置有点不同。我需要做类似的事情吗
Collections.File.files(**values).save() ?也就是说,不是做数据导入,而是加载集合对象,然后通过peewee添加文件关联字段?
构成类 File 的值
{'crc32': '63bee49d',
'format': 'Metadata',
'identifier': u'somevalue',
'md5': '34104ffce9e4084fd3641d0decad910a',
'mtime': '1368328224',
'name': 'lupi.jpg_meta.txt',
'sha1': '1448ed1159a5d770da76067dd1c53e94d5a01535',
'size': '1244'}