是否可以在mysemancrowids后面插入executemanrowid?

2024-09-19 23:32:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我不能确定生成的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() 

Tags: selfnoneclosesqlifdefexceptionargs
1条回答
网友
1楼 · 发布于 2024-09-19 23:32:37

每次mysqldb执行涉及自动递增列的查询时,最后一个insert ID将丢失,除非您在下一个executemany()之前读取它,而使用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()函数如何工作的见解。在

相关问题 更多 >