MySQLdb执行

时间:2012-06-04 19:48:24

标签: python mysql syntax-error mysql-python

我在这个网站和其他许多网站上搜索过高低,并且发现了类似的问题,但没有一个答案对我有效(通常只是考虑元组)。我正在编写一个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. Traceback(最近一次通话):   文件“C:\ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py”,第171行,执行中     r = self._query(查询)   _query中的文件“C:\ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py”,第330行     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”附近使用的yntax“)

  2. Traceback(最近一次通话):   文件“C:\ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py”,第171行,执行中     r = self._query(查询)   _query中的文件“C:\ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py”,第330行     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”附近使用的yntax“)

  3. 为什么此查询不起作用!?


    更新:几乎拉了我的头发后我决定恢复到2.7.3并猜测...现在一切正常:D应该知道这是一个类型的错误...谢谢你的帮助没有少了所有人!

3 个答案:

答案 0 :(得分: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()

背景信息:在unofficial Python packages站点上发布的MySQLdb到Python 3的端口中,cursors.py中的执行函数被修改为使用format()而不是%运算符。因此,为什么%s仍然在SQL语句中而不是被替换。看起来这些更改从未被上传到official source

答案 1 :(得分:1)

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

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

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

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

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

http://www.sqlalchemy.org/

答案 2 :(得分:-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预订。免费。