pymysql3 cursor.lastrowid有时不起作用

时间:2016-04-12 21:11:29

标签: mysql python-3.x cursor pymysql

我对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。

任何人都可以帮助我,

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

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

1 个答案:

答案 0 :(得分:1)

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