完整性错误:使用sqlalchemy在postgres中复制密钥(id)

时间:2015-04-02 18:47:36

标签: python postgresql sqlalchemy flask-sqlalchemy

我有一些代码,当我尝试插入新记录时遇到完整性错误时不时(不总是):

  

IntegrityError:(IntegrityError)重复键值违反唯一   约束“question_pkey”DETAIL:Key(id)=(1)已经存在。

我在这里读到某个地方,这不是Postgres错误,所以它可能与我的代码有关。

当我做卷曲时,我正在插入这些东西: curl 127.0.0.1:5000/test/question -d '{"question_order": 6, "question_admin_type": 2}'

我的代码如下:

def post(self, question_id=0):
    post_args = request.get_json(force=True)
    if question_id == 0: # assume new record
        question_obj = Question(**post_args)
        db.session.add(question_obj)
        db.session.flush()
        db.session.commit()

错误消息似乎指向db.session.flush(),但我不知道为什么。看起来它之前的线路有问题。看起来我的程序试图从最开始的id开始插入,如果失败则会抛出此错误。在下一次插入尝试(使用cURL)时,它将尝试下一个id,如果已经有一个使用该id的条目,则执行相同的操作,并且它将继续发生,直到它到达未使用的id。我也使用flask-sqlalchemy扩展,如果那是相关的。

1 个答案:

答案 0 :(得分:0)

使用**post_args添加question_obj json数据类型具有索引,该索引将转换为行ID,类似于为同一行指定多于id = 1 id = 1