2011-06-07 151 views
0

我有一个很长的查询,我需要执行,并且我正在使用预准备语句将值插入到查询中。据我所知,这是假设工作,但它不工作!Python/Mysql:拒绝转义字符串!

下面的代码:

cursor = connection.cursor() 
    rows = cursor.execute(r"""SELECT... %s.. %s.. %s...""",(val1,val2,val3,)) 
    rows = cursor.fetchall() 
    rows = text_position(rows) 

如果我插入一个简单的引号它打破,而同样的事情,如果我将任何非英语字符。当我将陈述包裹在它们中时,它使用双引号。有什么建议么?

+0

有什么错误:

一旦你完成调试,就可以关闭记录的mysqld,并重新启动它?发布实际的SQL语句也会有所帮助 – dfb 2011-06-07 17:33:54

+0

这是因为你的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以在''test''附近使用正确的语法)ON DUPLICATE KEY UPDATE count = count + 1'at line 1'。当我插入一个非英文字符时,我得到这个''ascii'编解码器不能编码字符u'\ xf6'在位置6:序号不在范围(128)'中。对不起,我无法发布查询,但我可以告诉你这是一个全文搜索。我希望这有助于.. – qwerty 2011-06-07 17:37:09

+0

我刚解决了它!这只是我犯的一个错误,我在另一个查询中使用了相同的变量,这就是引发错误的查询,而不是这个。虽然谢谢! – qwerty 2011-06-07 17:41:09

回答

0

这对于调试SQL(从另一种语言产生特别是,像Python)的一般技术:

停止MySQL服务器(假设你运行mysqld的无记录):

sudo invoke-rc.d mysql stop 

运行mysqld打开日志记录:

sudo mysqld --log=/tmp/myquery.log 

运行脚本。

在/tmp/myquery.log中查找MySQLdb发送给mysqld的SQL命令。

这可能给你足够的线索来解决问题的,否则,请在Python

cursor.execute(r"""SELECT... %s.. %s.. %s...""",(val1,val2,val3,)) 

和相应的SQL发布完整的SQL命令在/tmp/myquery.log mysqld的所见。

sudo invoke-rc.d mysql restart