当前位置: 首页 > 面试题库 >

Sqlite。除了last_insert_rowid()之外,如何在插入后获取自动增量主键的值?

鞠子轩
2023-03-14
问题内容

我在Flask微框架中使用Sqlite3,但是这个问题仅涉及Sqlite方面。

这是代码片段:

g.db.execute('INSERT INTO downloads (name, owner, mimetype) VALUES (?, ?, ?)', [name, owner, mimetype])
file_entry = query_db('SELECT last_insert_rowid()')
g.db.commit()

downloads表还有另一列,具有以下属性: id integer primary key autoincrement,

如果两个人同时写,上面的代码可能会产生错误。

交易可能会很混乱。在Sqlite中,是否有一种整洁的内置方法可以返回执行INSERT之后生成的主键?


问题答案:

你这样做的方式是有效的。如果上面的片段被两个脚本同时执行,则不会有问题。last_insert_rowid()返回调用它的连接的最新INSERT语句的rowid。你还可以通过执行以下操作获取rowid g.db.lastrowid



 类似资料:
  • 问题内容: 我生成一个SQLite表(在Java中): 之后,我尝试使用INSERT命令添加行: 我得到错误: 我以为行ID会自动生成,但似乎我什么都没想。 我尝试了另一种解决方案: 结果,我在“ prep.setInt(1,n);”处收到一个空指针异常。 看到故障了吗? 问题答案: 您是否尝试指出要传递的参数应该与表的哪些字段相关? 在您的情况下,可能类似于:

  • 问题内容: 我正在使用Hibernate访问MySQL,并且有一个带有自动递增主键的表。 每次我在表中插入一行时,都不需要指定主键。但是,在插入新行之后,如何立即使用hibernate获取相对主键? 或者我可以只使用jdbc来做到这一点? 问题答案: 保存hibernate实体时,将为您填充该属性。所以如果你有 实际上,我几乎总是在测试中对持久实体的ID进行一次操作,以确保保存有效。

  • 问题内容: 我正在尝试获取类似mysql_insert_id()的mysql命令;它检索最后插入的行的auto_increment ID。我该怎么做才能在Java中获得它? 我的姓氏声明为INT。我不知道在rs.get中使用什么以及参数。 问题答案: 尝试使用别名

  • 问题内容: 我正在尝试更改没有主键或auto_increment列的表。我知道如何添加主键列,但我想知道是否有可能自动将数据插入主键列(我已经在数据库中有500行,并希望为其提供ID,但我不想手动执行) 。有什么想法吗?非常感谢。 问题答案: 在我的测试中,添加列的语句可以正常工作: 在为测试目的而创建的临时表上,以上语句创建了该 列,并为该表中的每个现有行插入了自动递增值,从1开始。

  • 问题内容: 我将主键设置为自动递增。 我正在执行多个查询,我需要检索该主键值以用作另一个表()中的外键。 当我执行插入查询时,是否有任何优雅的方法来获取主键值?现在,我正在重新查询并获得该列中的最高价值,这似乎真的很棘手。 有什么建议? 问题答案: 通过scope_identity()获得新的PK

  • 问题内容: 我正在使用Python 在mysql中运行查询 运行查询后,我想知道该行的主键。我知道有查询 但是我不确定它是否可以与插入忽略一起使用 做这个的最好方式是什么? 问题答案: 文档的说: 如果使用INSERT IGNORE并且忽略该行,则AUTO_INCREMENT计数器不会增加,并且LAST_INSERT_ID()返回0,这表明没有插入行。 知道了这一点,您可以将其分为多个步骤: 插入