所以我有一个函数创建一个新的对象实例来表示一个帐户,并使用SQLite3将该帐户添加到数据库中的一个帐户表。数据库表有3列,其中一列是主键accountID列,由SQL自动设置。我的对象实例需要知道这个accountID,以便将来可以在数据库中找到它自己,但我不确定如何做到这一点。我的代码:
def createAccount(self, name, balance):
#ensure account name has been entered
if name == "":
messagebox.showwarning(title = "Error", message = "You did not enter an account name.")
return
#Insert new record into accounts table (primary key set automatically)
self.cursor.execute("""INSERT INTO accounts(name, balance) VALUES(?,?)""", (name, balance))
#Create a new Account object instance and add to accounts dictionary
self.accounts[name] = Account(self, self.accountContainer, accountID, name, balance)
问题是将accountID传递到帐户初始化程序;我不知道如何在不查询我刚创建的记录数据库的情况下使用我拥有的名称和余额获取此信息,这听起来像是一个相当混乱的解决方案。任何有关创意的工作?
答案 0 :(得分:1)
sqlite3 Cursor
对象具有lastrowid
属性:
此只读属性提供上次修改行的rowid。仅在您发出
INSERT
或REPLACE
声明时才会设置 使用execute()
方法。对于INSERT
或以外的操作REPLACE
或在调用executemany()
时,lastrowid
设置为None
。如果
INSERT
或REPLACE
语句未能插入,则返回上一个成功的rowid。在版本3.6中更改:添加了对
REPLACE
语句的支持。
所以在execute()
:
accountID = self.cursor.lastrowid