我有一个在循环中运行的查询字符串,并且列表查询中的每个项目都被执行。该列表包含字符串,我使用 python 字符串格式技术将查询替换为列表中的相应字符串作为迭代进度。
我已经对查询以及列表中的字符串进行了统一编码:这是我的统一查询:
query = ur'''SELECT something FROM some_table WHERE some_name LIKE "{this_name}%"'''
在执行之前,我将查询字符串编码为utf-8
try:
formatted_query = query.format(this_name=list_name)
#encode the query
encoded_q = formatted_query.encode('utf-8')
# execute the query
self.dbCursor.execute(encoded_q)
row = self.dbCursor.fetchone()
except Exception, e:
traceback.print_exc()
但问题是,有时我会遇到列表中包含单引号示例的字符串:foo's
. 我已经使用 utf-8 进行了 unicode,我认为这样做我不必担心这样的情况。但我收到 sql 错误,因为 MySQL 没有跳过单引号。
我的下一个尝试是替换单引号:
format_string = u"foo's".replace(u"'",u"\'")
但这也不起作用。我还看到这个问题的答案是使用我不知道的 mysqldb 库内置功能,所以我寻求 stackoverflow 社区的帮助来解决这个问题。
我更改了代码以反映答案中建议的解决方案,但结果是相同的:这是更改:
args = [u"{this_name}%".format(this_name=format_name)]
self.dbCursor.execute(query.encode('utf-8'), args)
#error 在这一行被抛出:
错误:
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u014d' in position 4: ordinal not in range(256)
这是错误抱怨的字符串,我已经检查了该字符串的类型,它是一个未编码的字符串。
this_name= Sentōkisei type= <type 'unicode'>