python中的unicode变成'\ xXX \ xXX'

时间:2011-11-02 02:51:23

标签: python unicode mysql-python

我正在使用MySQLdb,我使用:

cursor.execute(QUERY)

QYERY在哪里:

INSERT (A,B,C) VALUES("%s","%s",something);'%(k1, u'W')**

w是波斯语字母(字面意思是它!我只是用W代替它,以防你查看波斯语字母有问题,它就像ب),而k1是英语。但我明白了:

`Traceback (most recent call last):
  File "./i.py", line 47, in <module>
    c.doit(db)
  File "./i.py", line 41, in doit
    db.cr.execute('INSERT (A,B,C) VALUES("%s","%s",something);'%(k1, u'ب'))
  File "/usr/lib/pymodules/python2.7/MySQLdb/cursors.py", line 174, in execute
    self.errorhandler(self, exc, value)
  File "/usr/lib/pymodules/python2.7/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1064, 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'(term_tit,term_desc,term_cat) VALUES("a\n","\xd8\xa8",general)\' at line 1')`

请参阅? W字母变为“\ xd8 \ xa8”我该怎么办?

更新:修复了sql查询中的错误,但是\ xd8 \ xa8问题仍然存在, 现在当从数据库中检索数据时,我得到“ ?????? ”而不是我输入的内容

2 个答案:

答案 0 :(得分:3)

您错过了INTO table_name条款。这是我看到的唯一实际问题。

ب更改为\xd8\xa8只意味着您的Unicode在进入数据库的过程中被编码为UTF-8(这可能就是您想要的)。 MySQL使用\xXX符号(hexadecimal escape符号报告UTF-8编码的字节;例如,\x20表示ASCII空间)以提供全部 - ASCII错误消息(可能有点神秘,特别是如果你不习惯它,但这不是问题)。

答案 1 :(得分:0)

docs建议使用占位符标记避免问题,让Python为您执行字符串替换:

 db.cr.execute('INSERT (A,B,C) VALUES(?, ?,something)', (k1, u'W'))

占位符标记主要是关于阻止injection attacks,但它们还负责正确转义字符串并处理编码问题。

如果这有助于unicode替换问题,请告诉我。