I cannot be sure whether the ids generated is continously,if not,is there any otherway to get them?
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()
Every time mysqldb executes a query involving an auto-increment column, the last insert ID will be lost unless you read it before the next execute(), which with an executemany() you won't be able to do.
You would have to change the above code to something like:
num = 0
insert_ids = []
for arg in args:
num += cur.execute(sql, arg)
insert_ids.append(cur.lastrowid)
Since the Python module is really a thin layer over the MySQL API, here is some insight into how the mysql_insert_id() function works.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With