我在这个网站和其他许多网站上搜索过高低,并且发现了类似的问题,但没有一个答案对我有效(通常只是考虑元组)。我正在编写一个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个错误:
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“)
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“)
为什么此查询不起作用!?
答案 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:
答案 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预订。免费。