pymysql3 cursor.lastrowid 有时不起作用
pymysql3 cursor.lastrowid doesn't work sometimes
我对 pymysql3 cursor.lastrowid 属性 有一个奇怪的问题。我正在编写线程化 python3 应用程序。它在主线程中有一个打开的 pymysql3 连接器,以及许多可以随机执行 select/insert/update 的函数。我 运行 这些函数在应用程序的线程中。每个函数都有下一个构造:
def function...(link_to_connector)
....
cur = link_to_connector.cursor(pymysql.cursors.DictCursor)
cur.execute(...)
id = cur.lastrowid #Used only in INSERT constructions
cur.close()
...
连接器是通过以下方式打开的:
self.connector = pymysql.connect(host, user, pass, db, charset='utf8')
self.connector.autocommit(True)
一切正常,但有时 cur.lastrowid 在新的插入操作后等于 0。数据库中实际插入的行具有非零 ID。数据库是 MySQL 和 InnoDB 表。
谁能帮帮我,
这种情况出了什么问题?
在每个函数中打开和关闭游标是不是一个好方法?
我已经解决了这个问题。这是一个典型的竞争条件,因为 pymysql.connector() 对象不是线程安全的。
我对 pymysql3 cursor.lastrowid 属性 有一个奇怪的问题。我正在编写线程化 python3 应用程序。它在主线程中有一个打开的 pymysql3 连接器,以及许多可以随机执行 select/insert/update 的函数。我 运行 这些函数在应用程序的线程中。每个函数都有下一个构造:
def function...(link_to_connector)
....
cur = link_to_connector.cursor(pymysql.cursors.DictCursor)
cur.execute(...)
id = cur.lastrowid #Used only in INSERT constructions
cur.close()
...
连接器是通过以下方式打开的:
self.connector = pymysql.connect(host, user, pass, db, charset='utf8')
self.connector.autocommit(True)
一切正常,但有时 cur.lastrowid 在新的插入操作后等于 0。数据库中实际插入的行具有非零 ID。数据库是 MySQL 和 InnoDB 表。
谁能帮帮我,
这种情况出了什么问题?
在每个函数中打开和关闭游标是不是一个好方法?
我已经解决了这个问题。这是一个典型的竞争条件,因为 pymysql.connector() 对象不是线程安全的。