2012-03-22 44 views
10

我無法確定生成的ID是否連續,如果不是,還有其他方法可以獲得它們嗎?是否可以在mysqldb中executemany插入後獲取所有lastrowids?

class BaseDao(object): 

    def __init__(self,pooldb): 
     self.pooldb = pooldb 

    def insertmany(self,sql,args): 
     conn,cur = None,None 
     try: 
      conn = pooldb.dedicated_connection() 
      cur = conn.cursor() 
      num=cur.executemany(sql,args) 
      if num <= 0: 
       raise Exception("insert failure with num equals zero") 
      lastrowid = int(cur.lastrowid) 
      return [range(lastrowid - num + 1,lastrowid+1)] 
     except: 
      conn.rollback() 
      traceback.print_exc() 
      raise Exception("error happened when insert sql=%s args=%s " % (sql,str(args))) 
     finally: 
      if cur: 
       cur.close() 
      if conn: 
       conn.close() 

回答

7

每次MySQLdb的執行涉及自動增量列的查詢,最後插入的ID將丟失,除非你先下一讀它的execute(),它與一個executemany(),您將無法去做。

你將不得不上面的代碼更改爲類似:

num = 0 
insert_ids = [] 

for arg in args: 
    num += cur.execute(sql, arg) 
    insert_ids.append(cur.lastrowid) 

由於Python模塊是真的結束了MySQL的API薄薄的一層,這裏是一些洞察mysql_insert_id()功能是如何工作的。

+0

好吧,我不會給任何希望,除非按順序執行,否則就等於解決它,就像你說的那樣 – bigwesthorse 2012-04-10 09:04:16

相關問題