big*_*rse 11 python mysql-python executemany
我不能确定生成的ID是否是连续的,如果没有,是否还有其他方法可以获得它们?
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()
Run Code Online (Sandbox Code Playgroud)
小智 8
每次mysqldb执行涉及自动增量列的查询时,除非您在下一个execute()之前读取它,否则最后一个插入ID将会丢失,而executemany()将无法执行.
您必须将上面的代码更改为:
num = 0
insert_ids = []
for arg in args:
num += cur.execute(sql, arg)
insert_ids.append(cur.lastrowid)
Run Code Online (Sandbox Code Playgroud)
由于Python模块实际上是MySQL API的一个薄层,因此这里有一些关于mysql_insert_id()函数如何工作的见解.
归档时间: |
|
查看次数: |
2539 次 |
最近记录: |