将新记录添加到Python SQLite3中的表时记录主键?

时间:2017-09-08 12:54:57

标签: python sqlite

所以我有一个函数创建一个新的对象实例来表示一个帐户,并使用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传递到帐户初始化程序;我不知道如何在不查询我刚创建的记录数据库的情况下使用我拥有的名称和余额获取此信息,这听起来像是一个相当混乱的解决方案。任何有关创意的工作?

1 个答案:

答案 0 :(得分:1)

sqlite3 Cursor对象具有lastrowid属性:

  

此只读属性提供上次修改行的rowid。仅在您发出INSERTREPLACE声明时才会设置   使用execute()方法。对于INSERT或以外的操作   REPLACE或在调用executemany()时,lastrowid设置为None

     

如果INSERTREPLACE语句未能插入,则返回上一个成功的rowid。

     

在版本3.6中更改:添加了对REPLACE语句的支持。

所以在execute()

之后
accountID = self.cursor.lastrowid