2013-08-05 29 views
1

我跑了一个问题,我不知道如何解决。Python和Mysql的报价和变量

我有这样一行:

parse = cur.execute("SELECT * FROM testdb WHERE Match(name) AGAINST   ('"The.New.York.Times"' IN BOOLEAN MODE);") 

如果我运行:

parse = cur.execute("SELECT * FROM testdb WHERE Match(name) AGAINST ('"The.New.York.Times"'  IN BOOLEAN MODE);") 

在MySQL控制台,它的工作原理。但我猜python不喜欢'"The.New.York.Times"'引号。我如何解决这个问题?

而且,我将如何在Python中使该搜索字符串变量? 东西沿线

parse = cur.execute("SELECT * FROM testdb WHERE Match(name) AGAINST ('"%s"' IN BOOLEAN MODE);, var1") 

回答

1

为了避免SQL注入,并得到适当的转义,你应该通过查询变量作为第二个参数来execute

param = '"The.New.York.Times"' 
cur.execute("SELECT * FROM predb WHERE Match(name) AGAINST (%s IN BOOLEAN MODE)", (param,)) 
+0

该代码没有工作,但是如果我删除了'%s的它做了工作,感谢您的帮助! – tsjk

+0

好的,太好了。我认为你需要''' – alecxe

+0

通常,你不需要在分析结束时使用分号,也值得阅读[Python DB API FAQ](http://wiki.python.org/) moin/DbApiFaq)(支持哪个参数类型可能取决于数据库驱动程序。) – Bruno