14

生成された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() 
4

1 に答える 1

10

mysqldb が自動インクリメント カラムを含むクエリを実行するたびに、次の execute() の前に読み取らない限り、最後の挿入 ID が失われます。これは、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()関数がどのように機能するかについての洞察を以下に示します。

于 2012-03-26T22:17:51.207 に答える