我对pymysql3 cursor.lastrowid属性有一个奇怪的问题。我正在编写一个线程python3应用程序。它在主线程中有一个打开的pymysql3连接器,以及许多可以随机选择/插入/更新的函数。我在应用程序的线程中运行这些函数。每个功能都有下一个结构:
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。 DB中的实际插入行具有非零ID。 DB是带有InnoDB表的MySQL。
任何人都可以帮助我,
这种情况出了什么问题?
在每个函数中打开和关闭光标是一个好方法吗?
答案 0 :(得分:1)
我已经解决了这个问题。是典型的竞争条件,因为pymysql.connector()对象不是线程安全的东西。