关系型数据库设计时,将ID列设为自动增长列是很普遍的方式,那么在python用 insert 插入数据后如何获取由数据库产生的ID,从而获取新加的记录呢?
一般的方法是在表里加一个guid列,这列的值在前台就产生,前台 insert 插入后,可以按这个guid重新select到记录。
python 里对 oracle 和 sqlite 的操作可以内置了类似的方法,可以直接取到ID.
sqlite 是pythin内建支持的数据库,oralce 需要用 cx_oralce 模块。两者取ID的方式稍有不同,但逻辑一致。
下面是两段同功能代码,分别是对 sqlite 和 oracle 操作。
这是sqllite取ID方式,执行完insert 后,cursor 直接就能通过lastrowid取得 ID 值。
def AddFangan(self, label):
c = self.conn.cursor()
c2 = c.execute("insert into JYFA (fieldlabel,FIELDTYPE,pid) values(?,?,?)", (label, 0, 0))
dataid = c2.lastrowid
self.conn.commit()
return dataid
这是cx_oracle 取ID方式,insert 执行后,cursor取回的lastrowid不是 ID列的值,而是oracle内置的 rowid 的值,然后通过rowid 再 select 取回ID列值。
def AddFangan(self, label):标签:insert,Python,self,label,cursor,添加,lastrowid,ID From: https://blog.51cto.com/fangkailove/5881781
c = self.conn.cursor()
c.execute("insert into %s (fieldlabel,FIELDTYPE,pid,dsporder) values(:1,:2,:3,:4)" % self.tb1name,
(label, 0, 0, 0))
lastrowid = c.lastrowid
cursor = c.execute("select id from %s where rowid=:1 " % self.tb1name, (lastrowid,))
row = cursor.fetchone()
dataid = row[0]
self.conn.commit()
return dataid