TypeError: argument 1 must be a string or unicode object
TypeError: argument 1 must be a string or unicode object
使用这个查询:
04/25/2017 00:42:28.180 INFO (u"UPDATE posts SET translated_text='Unroll.me CEO dice que es "desgarrador" que los usuarios se molesten Unroll.me vendi\xf3 sus datos de correo electr\xf3nico anonimizado a Uber', detected_language='en' WHERE post_id=2", u'Unroll.me CEO dice que es "desgarrador" que los usuarios se molesten Unroll.me vendi\xf3 sus datos de correo electr\xf3nico anonimizado a Uber')
使用 psycopg2
,当我使用:cur.execute(query)
我得到:
TypeError: argument 1 must be a string or unicode object
使用查询和传递 unicode 值的最佳选择是什么。目前我已经参数化了 SQL 查询并传递了 'u'.
return u"UPDATE posts SET translated_text='%s', detected_language='%s' WHERE post_id=%s;" % (
translation, detected_language['language'], str(post_id))
我也加了,没啥区别:
import psycopg2.extensions
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
该日志显示了一个 元组 的 unicode 字符串,而不是 unicode 字符串。在执行检查之前尝试记录 query
的类型。
记录参数化查询的首选方式是:
query = u"UPDATE posts SET translated_text='%s', detected_language='%s' WHERE post_id=%s;"
vars = translation, detected_language['language'], str(post_id) # tuple
cur.execute(query, vars)
您可能还希望将 vars
的字符串显式转换为 unicode,而不是依赖于此隐式完成。例如。
vars = translation, detected_language['language'].decode("utf8"), str(post_id).decode("utf8")
使用这个查询:
04/25/2017 00:42:28.180 INFO (u"UPDATE posts SET translated_text='Unroll.me CEO dice que es "desgarrador" que los usuarios se molesten Unroll.me vendi\xf3 sus datos de correo electr\xf3nico anonimizado a Uber', detected_language='en' WHERE post_id=2", u'Unroll.me CEO dice que es "desgarrador" que los usuarios se molesten Unroll.me vendi\xf3 sus datos de correo electr\xf3nico anonimizado a Uber')
使用 psycopg2
,当我使用:cur.execute(query)
我得到:
TypeError: argument 1 must be a string or unicode object
使用查询和传递 unicode 值的最佳选择是什么。目前我已经参数化了 SQL 查询并传递了 'u'.
return u"UPDATE posts SET translated_text='%s', detected_language='%s' WHERE post_id=%s;" % (
translation, detected_language['language'], str(post_id))
我也加了,没啥区别:
import psycopg2.extensions
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY)
该日志显示了一个 元组 的 unicode 字符串,而不是 unicode 字符串。在执行检查之前尝试记录 query
的类型。
记录参数化查询的首选方式是:
query = u"UPDATE posts SET translated_text='%s', detected_language='%s' WHERE post_id=%s;"
vars = translation, detected_language['language'], str(post_id) # tuple
cur.execute(query, vars)
您可能还希望将 vars
的字符串显式转换为 unicode,而不是依赖于此隐式完成。例如。
vars = translation, detected_language['language'].decode("utf8"), str(post_id).decode("utf8")