0

我在这个网站和许多其他网站上进行了高低搜索,发现了类似的问题,但没有一个答案对我有用(通常只是考虑元组)。我正在编写一个 python 脚本来解析 html 页面并填充数据库。除了填充部分,我几乎所有东西都在工作......

这是处理 mySQL 数据库的代码段(注意:在 python 中使用 MySQLdb 模块)

conn = MySQLdb.connect(user="root", passwd="xxxxx",db="nutrients")
cur = conn.cursor()
test = "Canned Corn"
cur.execute("INSERT INTO food (name) VALUES (%s)", (test,))
conn.commit()

我首先用解析过的字符串对其进行了测试,但这不起作用。这给了我2个错误:

  1. 回溯(最近一次调用最后):文件“C:\Python32\lib\site-packages\MySQLdb\cursors.py”,第 171 行,在执行 r = self._query(query) 文件“C:\Python32\lib\ site-packages\MySQLdb\cursors.py”,第 330 行,在 _query rowcount = self._do_query(q) 文件“C:\Python32\lib\site-packages\MySQLdb\cursors.py”,第 294 行,在 _do_query db .query(q) _mysql_exceptions.ProgrammingError: (1064, "您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '%s)' 附近使用正确的语法")

  2. 回溯(最近一次调用最后):文件“C:\Python32\lib\site-packages\MySQLdb\cursors.py”,第 171 行,在执行 r = self._query(query) 文件“C:\Python32\lib\ site-packages\MySQLdb\cursors.py”,第 330 行,在 _query rowcount = self._do_query(q) 文件“C:\Python32\lib\site-packages\MySQLdb\cursors.py”,第 294 行,在 _do_query db .query(q) _mysql_exceptions.ProgrammingError: (1064, "您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '%s)' 附近使用正确的语法")

为什么这个查询不起作用!?


更新:在几乎拔掉我的头发后,我决定恢复到 2.7.3 并猜猜是什么......现在一切正常:D 应该知道这是那种类型的错误......仍然感谢大家的帮助!

4

3 回答 3

2

我也遇到了这个。经过大量挖掘后,发现这是可行的(注意对值的更改):

conn = MySQLdb.connect(user="root", passwd="xxxxx",db="nutrients")
cur = conn.cursor()
test = "Canned Corn"
cur.execute("INSERT INTO food (name) VALUES ({0})", (test,))
conn.commit()

背景信息:在非官方 Python 包站点上发布的 MySQLdb 到 Python 3 的移植中,cursors.py 中的执行函数被修改为使用 format() 而不是 % 运算符。因此,为什么 %s 保留在 SQL 语句中而不是被替换。看起来这些更改从未上传到官方来源

于 2012-06-25T18:29:04.653 回答
1

我认为您不需要任何棘手或高级的 SQL;你只需要存储和检索一些东西。所以,我认为 ORM 可能会让你的生活更轻松。

我建议你尝试使用秋季 ORM:

http://pypi.python.org/pypi/autumn/0.5.1

那是一个小而简单的 ORM,易于理解和使用。

另一个适用于 Python 的优秀且流行的 ORM 是 SQLAlchemy:

http://www.sqlalchemy.org/

于 2012-06-04T19:59:23.823 回答
-3

你应该这样写你的代码:

 conn = MySQLdb.connect(user="root", passwd="xxxxx",db="nutrients")
 cur = conn.cursor()
 test = "Canned Corn"
 cur.execute("INSERT INTO food (name) VALUES (%s)" % (test,) )
 conn.commit()

如果您是 python 新手并且有一些编程经验,那么请遵循Dive Into Python书。免费。

于 2012-06-04T21:35:29.133 回答