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 表。

谁能帮帮我,

  1. 这种情况出了什么问题?

  2. 在每个函数中打开和关闭游标是不是一个好方法?

我已经解决了这个问题。这是一个典型的竞争条件,因为 pymysql.connector() 对象不是线程安全的。