【问题标题】:What is the proper way to do an INSERT query in Python MySQL?在 Python MySQL 中进行 INSERT 查询的正确方法是什么?
【发布时间】:2010-08-09 16:57:14
【问题描述】:

我有一个连接到本地 MySQL 数据库的 python 脚本。我知道它连接正确,因为我可以这样做并获得正确的结果:

cursor.execute("SELECT * FROM reel")

但是当我尝试执行任何插入语句时,它什么也不做。没有错误消息,没有异常。当我从 sqlyog 检查它时,数据库中没有任何显示。这是我的代码的样子:

self.cursor.executemany("INSERT INTO reel (etime,etext) VALUES (%s,%s)", tups)

其中 tups 是一个元组列表,看起来像这样 ('0000-00-00 00:00:00','text')。没有错误出现,如果我将生成的 SQL 查询复制粘贴到 sqlyog 中,它就可以工作。我已经尝试生成查询并对其执行 cursor.execute() 并且没有错误也没有结果。有谁知道我做错了什么?

【问题讨论】:

    标签: python mysql


    【解决方案1】:

    你需要在self.cursor.executemany("INSERT INTO reel (etime,etext) VALUES (%s,%s)", tups)之后做一个self.cursor.commit()

    从 1.2.0 开始,MySQLdb 默认禁用自动提交,这是 DB-API 标准 (PEP-249) 的要求。如果您使用 InnoDB 表或其他类型的事务表类型,则需要在关闭连接之前执行 connection.commit() ,否则您的任何更改都不会写入数据库。

    相反,您也可以使用 connection.rollback() 丢弃自上次提交以来所做的任何更改。

    重要提示:某些 SQL 语句(尤其是 CREATE TABLE 等 DDL 语句)是非事务性的,因此它们无法回滚,并且会导致待处理的事务提交。

    Is a FAQ

    【讨论】:

    • 谢谢...就是这样。我在 python mysql 上阅读了 4 个不同的指南,但我从未注意到说要提交的部分大声笑。
    • 是的,我遇到了一个问题,在 MySQL 5.1.3 及更早版本上,我不需要添加提交语句,但在 MySQL 5.1.42 及更高版本上我必须添加 conn.commit()在我的execute 声明之后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2012-08-15
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多