我正在使用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问题仍然存在, 现在当从数据库中检索数据时,我得到“ ?????? ”而不是我输入的内容
答案 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替换问题,请告诉我。