【问题标题】:Python | MySQLdb -> I cant insert蟒蛇 | MySQLdb -> 我无法插入
【发布时间】:2012-03-25 00:12:18
【问题描述】:

我有一个奇怪的问题。 有两个数据库。一个有一个在线商店的所有产品。另一个有在线商店软件,只有有效的产品。

我想从 db1 中获取值,在 python 中更改一些值并插入到 db2 中。

db1.execute("SELECT * FROM table1")
for product in db1.fetchall():
    # ...
    db2.execute("INSERT INTO table2 ...")
    print "Check: " + str(db2.countrow)

所以我可以通过 select 获取值,即使从 db2 中选择也没有问题。我的支票总是给我 1 但表 2 中没有新行。自动增量值增长但没有数据。 而且我什至没有收到“无法插入”之类的错误 那么有人知道可能出了什么问题吗? (如果我通过 phpmyadmin 手动插入它可以工作......如果我只是从我的脚本中获取 sql 并手动执行,则 sql 语句也可以工作)

编辑:在这里找到答案How do I check if an insert was successful with MySQLdb in Python?

有没有办法让这些执行而无需每次都提交? 我有一个 mysqldb 的包装器,它非常适合我,通过提交来改变行为我需要做一些大的改变。

EDIT2:好的,我发现 db1 是 MyISAM(无需提交即可工作)而 db2 是 InnoDB(实际上似乎只适用于提交)我想我也必须将 db2 更改为 MyISAM。

【问题讨论】:

    标签: python database insert mysql-python


    【解决方案1】:

    如果您使用 InnoDB,请尝试在插入后添加 db2.commit()

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

    http://mysql-python.sourceforge.net/FAQ.html#my-data-disappeared-or-won-t-go-away

    【讨论】:

    • 感谢我自己在这个线程中发现了这一点:stackoverflow.com/questions/9014233/…
    • 我以前从来没有遇到过这个问题。这真的让我很恼火。数据库甚至不是 innodb 他们是 myisam。有没有办法让它像以前一样? ^^
    • @xMRW 应该有一个将 autocommit 设置为 true 的连接设置参数。不过要小心,因为事务是数据库完整性的重要组成部分。
    • 是的,打开连接时是关键字参数:autocommit=True
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 2021-08-19
    • 2020-05-17
    相关资源
    最近更新 更多