我知道有一个类似的问题,如何修复错误:(psycopg2.errors.NotNullViolation)列"id“中的空值违反了null约束?,但是答案并没有纠正我的错误。
我有以下sqlalchemy结构连接到postgres数据库
class Injury(db.Model):
__tablename__ = "injury"
id = Column(Integer, primary_key=True)
name = Column(String)
description = Column(String)
DDL看起来就像
create table injury
(
id bigint not null
constraint idx_182837_injury_pkey
primary key
constraint injury_id_key
unique,
name text,
description text,
);
但是,在尝试向数据库中插入一些内容时,如
injury = Injury(name='name', description='desc')
session.add(injury)
session.commit()
发生下列错误
Error '(psycopg2.errors.NotNullViolation) null value in column "id" of relation "injury" violates not-null constraint
在打开调试器时,我可以在提交之前验证injury
对象中的injury
属性是None
。
为什么会发生这种事?我的模式中的primary_key=True
不应该告诉postgres它负责创建id吗?我试着玩SEQUENCE
和IDENTITY
,但是我也犯了同样的错误。
发布于 2022-11-11 14:21:20
这是我在使用pg_loader
时从sqlite到postgres的某种形式的bug的结果。我发现另一个人,遇到这种情况和我遵循他们的指示,它纠正了我的问题。以下步骤都是在IntelliJ的数据库工具中完成的
id = Column(Integer, Identity(start=2116), primary_key=True)
,其中2116比我目前数据库中的最后一个id多一个。这是在没有Identity
字段的情况下工作的,但是键被设置为1,而不是2116。看看这篇文章,我意识到我需要使用Identity
字段。
发布于 2022-11-11 03:58:13
你必须告诉它自动增量不是使用bigint而是串行
id SERIAL PRIMARY KEY
检查这个how-to-define-an-auto-increment-primary-key-in-postgresql-using-python
https://stackoverflow.com/questions/74397817
复制相似问题