【问题标题】:Problem in insertion from python script in mysql database with innondb engine使用 innondb 引擎从 python 脚本插入 mysql 数据库中的问题
【发布时间】:2023-02-05 04:07:41
【问题描述】:

我遇到一个问题,我试图使用 InnonDB 引擎将数据从 python 脚本添加到 mysql 数据库,它与 mysql 数据库的 myisam 引擎一起工作正常。但是 myisam 引擎的问题是它不支持外键,所以我必须在每个我想在数据库中插入/删除记录的地方添加额外的代码。

有谁知道为什么 InnonDB 不能使用 python 脚本和这个问题的可能解决方案?

【问题讨论】:

  • 你面临的问题是什么?你有一些错误信息吗?你能把它们寄给我们吗?
  • “InnoDB 不适用于 Python 脚本”是什么意思?在我使用它的所有时间里它都运行良好。
  • @Daniel 在非自动提交模式下,如果您在提交之前断开连接,MySQL 会将您的更新扔出窗外。听起来很无聊。
  • 并没有完全损坏,因为这种行为是故意的。尽管 python dbapi 可能应该警告连接关闭时是否有正在进行的事务。
  • @Thouis,当然交易规则,但对于新手来说他们很烂。

标签: python mysql innodb myisam


【解决方案1】:

InnoDB 是事务性的。您需要在插入/删除/更新后调用 connection.commit()。

编辑:您可以调用 connection.autocommit(True) 来打开自动提交。

【讨论】:

  • 否 这取决于您的连接参数。你将其设置为不自动提交,但自动提交是默认设置。
  • 阅读上面的答案。 Python 禁用自动提交。
【解决方案2】:

Python DB API 默认禁用自动提交

从谷歌粘贴(第一页,第二个结果)

MySQL :: MySQL 5.0 参考手册 :: 13.2.8 InnoDB ...默认情况下,MySQL 使用 autocommit 为每个新连接启动会话 ...dev.mysql.com/.../innodb-transaction-model.html

然而

显然 Python 以非自动提交模式启动 MySQL,请参阅:
http://www.kitebird.com/articles/pydbapi.html

从文章:

连接对象的 commit() 方法提交当前事务中任何未完成的更改,使它们永久保存在数据库中。在 DB-API 中,连接以禁用自动提交模式,因此您必须在断开连接之前调用 commit() ,否则更改可能会丢失。

Bummer,不知道如何覆盖它,我不想通过猜测让你误入歧途。 我建议打开一个新问题,标题为:

如何在 MySQL python DB-API 中启用自动提交模式?

祝你好运。

【讨论】:

猜你喜欢
  • 2011-08-04
  • 2021-10-24
  • 2011-08-30
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 2012-04-19
  • 1970-01-01
相关资源
最近更新 更多