当前位置: 首页 > 面试题库 >

Python的MySqlDB无法更新行

鲁向明
2023-03-14
问题内容

我有一个脚本,它等待直到数据库中的某些行被更新:

con = MySQLdb.connect(server, user, pwd, db)

脚本启动时,该行的值为"running",并等待该值变为"finished"

while(True):
    sql = '''select value from table where some_condition'''
    cur = self.getCursor()
    cur.execute(sql)
    r = cur.fetchone()
    cur.close()
    res = r['value']
    if res == 'finished':
        break
    print res
    time.sleep(5)

当我运行此脚本时,它将永远挂起。即使我"finished"在查询表时看到该行的值已更改为,该脚本的打印输出仍为"running"

有没有我未设定的设定?

编辑:python脚本仅查询表。对表的更新由tomcat Web应用程序使用JDBC进行,该应用程序是在自动提交时设置的。


问题答案:

这是一个InnoDB表,对不对?InnoDB是事务存储引擎。将autocommit设置为true可能会为您解决此问题。

conn.autocommit(True)

或者,您可以更改事务隔离级别。您可以在这里阅读有关此内容的更多信息:http : //dev.mysql.com/doc/refman/5.0/en/set-
transaction.html

出现这种现象的原因是,在单个事务中读取必须保持一致。同一事务中的所有一致读取均读取由第一次读取建立的快照。即使您的脚本仅读取表,这也被视为事务。这是InnoDB中的默认行为,您需要对其进行更改或在每次读取后运行conn.commit()。

该页面对此进行了更详细的说明:http : //dev.mysql.com/doc/refman/5.0/en/innodb-consistent-
read.html



 类似资料:
  • 问题内容: 好的。我在这里建立了一个mysql查询浏览器,例如navicat。使用MySQLdb执行查询。 这是奇怪的部分。当我通过程序运行查询(使用MySQLdb)时,它给我成功,受影响的行= 1,但是当我在phpmyadmin中查看该查询时,该值没有改变。 因此,在执行查询之前,我先将其打印出来,然后将其复制并粘贴到phpmyadmin的查询窗口中,然后单击go即可运行。长话短说,更新查询不起

  • 问题内容: 我在OS X 10.10.5 Yosemite上安装了带有Homebrew的MySQL和MySQL。我的Python 2.7在处带有符号链接。 在其中有一个符号链接: 错误 在Python Shell中: 所以我尝试了: 其次是: 然后(绝望的原因): 但是在两种情况下仍然尝试导入。 然后我尝试 了: 现有答案 很多回答 这个 问题 的SO建议您手动进行明确的符号链接到同一个版本号库(

  • 我得到这个错误 食品项插入失败无法添加或更新子行:外键约束失败(.,约束外键()在更新级联上引用() 我试图以一种形式将食谱添加到我的数据库中。我希望输入的数据到3个不同的表。配料表、配方表和recipe_compridient表。recipe表中有一个自动增量id作为主键,而配料id作为recipe表中的外键。 我想要配料名称,数据到配料表和名称,课程,指令到配方表加上配料表中的配料ID 要转到

  • 问题内容: 我正在尝试使用MySQLdb从Python脚本在MySQL表上执行基本语句。我的桌子看起来像这样: 从MySQL命令行运行此查询可以正常工作: 但是,当我尝试从Python脚本执行查询时,不会插入任何行。这是我的代码: 奇怪的是,这将显示“插入的行数:1”。我还可以确认此查询增加了ID字段,因为当我通过命令行添加另一行时,其ID的值与Python脚本已成功插入其行的值相同。但是,运行查

  • 问题内容: 我正在构建Bokeh服务器来承载SQL查询功能,因此我想在网页上打印查询状态,因此我使用了小部件并更新了它的文本值。但是,“正在运行查询,请稍候…”的信息永远不会显示,完成函数执行后只能显示最后一个值。 我如何找到问题所在? 以下是我的代码的一部分: 问题答案: 散景状态仅在回调 结束 时与浏览器同步。如果要进行一些更新,然后进行大量阻塞性工作,然后进行另一项更新,则需要进行拆分,以便

  • 问题内容: 我在Mac上使用Flask(python软件包)时,第一次写css时显示正常。但是,当我更新它并尝试检查它时,我只看到第一个CSS样式。我尝试重新启动终端,以及重新安装Flask。有什么建议?谢谢。以下是HTML: 这是CSS: 问题答案: 如前所述,问题与浏览器缓存有关。 为了解决这个问题,你可以向静态(css,js)链接中添加一些动态变量。我更喜欢每个文件的上次修改时间戳。 这是一