2012-03-22 63 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

相关问题