python
  • unicode
  • psycopg2
  • 2017-04-25 65 views 1 likes 
    1

    使用此查询:类型错误:参数1必须是字符串或Unicode对象

    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) 
    
    +0

    尝试将对象字符串用作'str',而不是'unicode'字符串。所以''更新...“%(...)'没有最初的'u' –

    回答

    2

    该日志显示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") 
    
    相关问题