6

我正在使用 sqlite,我的Python代码如下:

...
cur.execute("insert or ignore into books (title, authors, ...) \
values (:title, :authors, ..."), locals())
...
bookId = cur.lastrowid

如果适用的ignore部分select statement

那么 的cur.lastrowid值为0

但这不是我想要的。books.id无论如何,我都想从数据库中获取价值。

我应该使用select语句还是有更聪明的方法来实现它?

我的临时解决方案:

if bookId == 0:
    cur.execute("select id from books where \
    title = :title and authors = :authors", locals())
    bookId = cur.fetchone()[0]  
4

2 回答 2

6

没有更好的办法。要从数据库中读取一些现有值,只有SELECT.

于 2013-06-28T17:10:41.427 回答
4

尝试on duplicate key update id=LAST_INSERT_ID(id)用于PK。从那时起,似乎 lastrowID 将是正确的。

于 2014-02-23T20:36:42.133 回答