首页 > 解决方案 > Peewee 和原始 SQL 创建语句

问题描述

我们为每个客户端都有一个专用的 Postgres 数据库,因为我们无法在不发疯的情况下处理每个客户端的数据库迁移,所以我们使用的是原始 SQL 文件。我们有一个初始 SQL 文件,用于创建表并插入一些数据。问题出现在我们尝试插入之前使用INSERT INTO句子填充了初始 SQL 脚本的表之后。

不知何故,peewee 想使用 ID=1 创建新记录,从而引发一个IntegrityrError(我们从 SQL 文件创建了一堆)。我不确定如何处理这种情况。

我有一个基本模型:

class BaseModel(peewee.Model):
    active = peewee.BooleanField(default=True)
    created_at = peewee.DateTimeField(default=datetime.datetime.now)
    updated_at = peewee.DateTimeField(null=True)

    class Meta:
        database = database

使用的示例模型BaseModel

class UserRole(BaseModel):
    user = peewee.ForeignKeyField(User)
    role = peewee.ForeignKeyField(Role)

    class Meta:
        indexes = (
            (('user', 'role'), True),
        )

SayUserRole有来自初始 SQL 脚本的 5 条记录。如果尝试使用UserRole.create烧瓶应用程序创建新记录,则会收到关于 ID=1 的完整性错误。

有什么想法吗?

标签: pythonpostgresqlflaskpeewee

解决方案


在插入新数据之前,您需要修复为您提供 id 值的序列。是一个如何做到这一点的例子。完成此操作后,请尽量避免在插入查询中使用显式 id,允许 db 为您分配 id 值


推荐阅读