mysql - pymysql3cursor.lastrowid 有时不起作用

标签 mysql python-3.x cursor pymysql

我对 pymysql3cursor.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。数据库中实际插入的行具有非零 ID。数据库是带有 InnoDB 表的 MySQL。

谁能帮帮我

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

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

最佳答案

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

关于mysql - pymysql3cursor.lastrowid 有时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36584115/

相关文章:

php - 更改选择查询

python - 需要解释为什么以下代码跨越无穷大

python - ndb 中的游标如何工作?

java - Android 以编程方式设置textcursordrawable,无需反射方法

css - 使用 CSS 的光标图像

mysql - 替换 mySQL 表中的字符串

mysql - ACCESS - 交叉表查询 - 最近匹配

mysql - wp 插入后无限循环

django - 在 Django ORM 中使用列过滤器获取主键 ID

python - pytest配置问题(从nosetests(71秒)到pytest(153​​6秒)的过渡)