我在尝试解决在使用 Python 从 SQLite3 中的查询中检索最后一个插入 id 时遇到的问题时遇到了一些麻烦。这是我的代码示例:
import sqlite3
# Setup our SQLite Database
conn = sqlite3.connect('value_serve.db')
conn.execute("PRAGMA foreign_keys = 1") # Enable Foreign Keys
cursor = conn.cursor()
# Create table for Categories
conn.executescript('DROP TABLE IF EXISTS Category;')
conn.execute('''CREATE TABLE Category (
id INTEGER PRIMARY KEY AUTOINCREMENT,
category CHAR(132),
description TEXT,
parent_id INT,
FOREIGN KEY (parent_id) REFERENCES Category (id)
);''')
conn.execute("INSERT INTO Category (category, parent_id) VALUES ('Food', NULL)")
food_category = cursor.lastrowid
conn.execute("INSERT INTO Category (category, parent_id) VALUES ('Beverage', NULL)")
beverage_category = cursor.lastrowid
...
conn.commit() # Commit to Database
Run Code Online (Sandbox Code Playgroud)
无论我做什么,当我尝试获取“food_category”的值时,我都会得到“None”的返回值。
任何帮助将不胜感激,提前致谢。
该lastrowid值是按游标设置的,并且仅对该游标可见。
您需要在执行查询的游标上执行查询以获取最后一行 ID。您正在询问一个任意游标,该游标实际上从未用于执行最后一行 id 的查询,但该游标无法知道该值。
如果您实际对cursor对象执行查询,它会起作用:
cursor.execute("INSERT INTO Category (category, parent_id) VALUES ('Food', NULL)")
food_category = cursor.lastrowid
Run Code Online (Sandbox Code Playgroud)
该connection.execute()函数为该查询创建一个新的(本地)游标,最后一行 id 仅在该本地游标上可见。使用时会返回该游标connection.execute(),因此您可以从该返回值中获得相同的值:
cursor_used = conn.execute("INSERT INTO Category (category, parent_id) VALUES ('Food', NULL)")
food_category = cursor_used.lastrowid
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3436 次 |
| 最近记录: |