具有自动增量主键的表中的PyQT QSqlTableModel insertRecord 问题

问题描述

我已经四处寻找解决我的问题的方法,但没有找到任何东西。问题在于将新记录插入到具有自动递增主键的数据库表中。以下是我得到的不同场景和行为。示例代码

model = QsqlTableModel(db = db,table = 'table')
record = model.record()
record.setGenerated('id',False)
record.setValue('name','a_name')
model.insertRecord(-1,record)

场景 1:包含一些行的预填充表。

| id | name |
|----|------|
| 1  | name1|
| 2  | name2|

行为 1:insertRecord 不向表中添加新记录。如果我删除 setGenerated 标志并手动指定一个 id [record.setValue('id',3)] 我可以插入一条新记录。

场景 2:包含一些行且第一个 ID 不是从 1 开始的预填充表。

| id | name |
|----|------|
| 3  | name1|
| 4  | name2|

行为2:第一个insertRecord 添加一个id = 1 的新记录,第二个insertRecord 添加一个id = 2 的记录。之后 insertRecord 不会添加任何新记录。它将尝试添加 id = 3 的新记录,但 id = 3 已经存在,并且不会跳转到下一个可用的 id (id = 5)。同样,如果我删除 setGenerated 标志并手动指定下一个可用的 id [record.setValue('id',5)],它会起作用。

场景 3:

| id | name |
|----|------|

行为 3:没有任何行的空表。 insertRecord 将从 id = 1 开始并继续添加新记录,没有问题。

如何在无需手动指定自动递增的 ID 的情况下解决此问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)