繁体   English   中英

lastrowid在python 3的sqlite3中返回None

[英]lastrowid returning None in sqlite3 in python 3

我在尝试解决使用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

无论我做什么,当我尝试获取'food_category'的值时,都会得到'None'的返回值。

任何帮助将不胜感激,在此先感谢。

每个游标设置lastrowid值,并且仅对该游标可见。

您需要在执行查询的游标上执行查询,以获取最后的行ID。 您正在询问一个任意游标,该游标实际上从未用于执行最后一行ID的查询,但是该游标无法知道该值。

如果您实际上在cursor对象上执行查询,那么它将起作用:

cursor.execute("INSERT INTO Category (category, parent_id) VALUES ('Food', NULL)")
food_category = cursor.lastrowid

connection.execute()函数为该查询创建一个新的(本地)游标,并且最后一行ID仅在该本地游标上可见。 当您使用connection.execute()返回该游标,因此您可以从该返回值获得相同的值:

cursor_used = conn.execute("INSERT INTO Category (category, parent_id) VALUES ('Food', NULL)")
food_category = cursor_used.lastrowid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM