没有外键的 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 强制执行它们。