【问题标题】:Update MySQL database with Python 3使用 Python 3 更新 MySQL 数据库
【发布时间】:2017-05-19 12:32:23
【问题描述】:

我正在尝试将来自 python 的数据插入到我使用 phpmyadmin 创建的 MySQL 数据库中。我正在使用 Python 3。这似乎没有更新我的数据库 - 这里发生了什么?

import MySQLdb

db = MySQLdb.connect("localhost", "uname", "password", "HORSERACES")

cursor = db.cursor()

sql = """INSERT INTO HORSERACES(Name, Event participant id, Market id, Event name, Event time)
VALUES('Brimful of Asha', 1099999876, 2098574628, 'Worthing Cup Chase', 29385756568, 2017-05-30 00:00:00)"""

try:
    cursor.execute(sql)
    db.commit()
except:
    db.rollback()

db.close()

print ('Success')

我得到的错误是:

_mysql_exceptions.ProgrammingError: (1064, "您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在 'participant id, Market id, Event name, Event time 附近使用的正确语法) \n\tVALUES('Brimful of Asha', 10' at line 1")

【问题讨论】:

  • 如果 try 块引发异常,它只会默默地回滚并在你不知道的情况下说成功。不要默默吞下异常。

标签: python mysql database python-3.x phpmyadmin


【解决方案1】:

这里发生的是糟糕的异常处理

try:
    cursor.execute(sql)
    db.commit()
except:
    db.rollback()

    # Something goes wrong and you are rolling back silently

至少你应该这样做

   import traceback
   traceback.print_exc()
   db.rollback()

那么你知道为什么插入没有发生。

更新:添加回溯后,很容易看到 mysql 正在阻塞列名。列名中不允许有空格。如果你使用它们,你需要用反引号来转义它们,但它们在某些库和客户端上仍然不能很好地发挥作用。

【讨论】:

  • 你说得对 - 我不知道该怎么做 - 已包含错误消息
  • 显然 `Event参与者 id` 不是有效的列名
  • 好的 - 我已经从所有内容中删除了空格,我得到的错误略有不同,但它仍然与 VALUES 的语法有关
  • 这正在变成一个变色龙问题或兔子洞问题。请善意将答案标记为正确,因为它确实解决了原始问题。从那时起,您至少更改了两次查询。请在您的确切查询以及相关表格中发布一个新问题。
  • 请注意日期之类的东西需要引用"2017-05-30 00:00:00"
猜你喜欢
  • 2017-08-27
  • 2014-01-04
  • 1970-01-01
  • 2010-09-27
  • 2021-08-24
  • 2019-11-16
  • 2021-04-16
  • 2012-07-22
相关资源
最近更新 更多