2012-06-04 52 views
0

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

这里是代码段与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 \站点包\ MySQLdb的\ cursors.py”,线路171,在执行 R = self._query(query) 文件“C:\ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py”,行330,in _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服务器版本为正确的s yntax使用近 '%S)' 第1" 行)

  2. 回溯(最近通话最后一个): 文件 “C:\ Python32 \ LIB \站点包\ MySQLdb的\ cursors.py”,行171,在执行 r = self._query(query) 文件“C:\ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py”,行330,in _query rowcount = self._do_query(q) File “C:\ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py”,第294行,在_do_query中 db.query(q) _mysql_exceptions.ProgrammingError :(1064,“您的SQL语法错误 ;检查对应于你的MySQL服务器版本的正确s yntax在1" 号线附近使用“%S)”)手动

为什么这个查询不行!?


更新:几乎把我的头发拉出后,我决定回到2.7.3,并猜测什么......现在一切正常了:D应该知道这是一种类型的错误......感谢帮助, !

+0

@ user145896是您的表中唯一的名称列吗? – jcho360

+0

也许尝试捕捉字符串里面,如下所示:str =“INSERT INTO food(name)VALUES”+ test然后cur.execute(str) –

+0

@ jcho360不,不过我可以只指定1列和SQL中的数据 – Odub

回答

1

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

我建议你尝试使用ORM秋:

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

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

另一个很好的和流行的ORM的Python是SQLAlchemy的:

http://www.sqlalchemy.org/

+0

感谢您的建议,尝试SQLAlchemy并得到字面上相同的错误。我喜欢sqlalchemy,所以我现在使用它:) – Odub

-2

你应该写你这样的代码:

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() 

如果你是新的蟒蛇,并有一定的编程经验,然后按照Dive Into Python的书。免费。

+3

不使用%铅到SQL注入? – Odub

+0

为什么你非常害怕sql注入。它是你的数据库,你正在为自己使用它(我希望如此)。 如果SQL注入可以在这里应用然后,为什么不在你的代码中使用逗号? – Manish

+3

@Manish - 嗯,你应该*总是*尽量防止SQL注入。 – RustyTheBoyRobot

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() 

背景信息:在MySQLdb的港口到Python 3张贴在一个unofficial Python packages网站,在游标执行功能。 py被修改为使用format()而不是%运算符。因此,为什么%s仍然在SQL语句中,而不是被替换。看起来这些更改从来没有成为official source的流行趋势。

相关问题