没有外键的 Peewee 插入
Peewee inserting without foreign keys
所以我使用 peewee 在 python 中创建数据库。
class BaseModel(Model):
class Meta:
database = db
class Phone(BaseModel):
'''Phone database model.'''
model = CharField(max_length=15, unique=True, primary_key=True)
class Imei(BaseModel):
'''Imei database model.'''
imei = CharField(max_length=15, unique=True, primary_key=True)
model = ForeignKeyField(Phone, to_field="model", related_name="imei's from model")
registered = BooleanField(default=False)
timestamp = DateTimeField(default=datetime.datetime(2014, 1, 1, 0, 0))
email = CharField(max_length=50, null=True)
我想在这里实现的是,每当我在 "Imei" table 上插入时,如果模型未在 "Phone" table 上列出,则不会插入.
我是用外键做的,但问题是当我在 imei table 上插入时,phone table 为空,插入没有问题。
我该如何解决这个问题?
外键是正确的方法(就像你做的那样)但表必须是 InnoDB。如果表是 MyISAM,则没有任何外键限制,因为 MyISAM 不使用外键。那么,您的表是 InnoDB 吗?
(我想发表评论而不是 post 一个答案,但我的声誉太低无法做到...)
我同意调查数据库。如果您使用的是 SQLite,请确保 PRAGMA foreign_keys=ON
强制执行它们。
所以我使用 peewee 在 python 中创建数据库。
class BaseModel(Model):
class Meta:
database = db
class Phone(BaseModel):
'''Phone database model.'''
model = CharField(max_length=15, unique=True, primary_key=True)
class Imei(BaseModel):
'''Imei database model.'''
imei = CharField(max_length=15, unique=True, primary_key=True)
model = ForeignKeyField(Phone, to_field="model", related_name="imei's from model")
registered = BooleanField(default=False)
timestamp = DateTimeField(default=datetime.datetime(2014, 1, 1, 0, 0))
email = CharField(max_length=50, null=True)
我想在这里实现的是,每当我在 "Imei" table 上插入时,如果模型未在 "Phone" table 上列出,则不会插入.
我是用外键做的,但问题是当我在 imei table 上插入时,phone table 为空,插入没有问题。
我该如何解决这个问题?
外键是正确的方法(就像你做的那样)但表必须是 InnoDB。如果表是 MyISAM,则没有任何外键限制,因为 MyISAM 不使用外键。那么,您的表是 InnoDB 吗?
(我想发表评论而不是 post 一个答案,但我的声誉太低无法做到...)
我同意调查数据库。如果您使用的是 SQLite,请确保 PRAGMA foreign_keys=ON
强制执行它们。