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

    でなければなりません:psycopg2例外TypeError:引数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') 
    

    、私が使用している場合:cur.execute(query)私が取得:

    TypeError: argument 1 must be a string or unicode object 
    

    使用するための最良のオプションは何ですかユニコード値を照会して渡します。現在、SQLクエリを既にパラメータ化していて、 'u'を渡しています。 Unicode文字列のタプルはなく、Unicode文字列を示しているログ

    import psycopg2.extensions 
    
    psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) 
    psycopg2.extensions.register_type(psycopg2.extensions.UNICODEARRAY) 
    
    +0

    オブジェクト文字列を 'unicode'文字列ではなく' str'として使用してください。だから '' UPDATE ... "%(...)'には初期の 'u' –

    答えて

    2

    return u"UPDATE posts SET translated_text='%s', detected_language='%s' WHERE post_id=%s;" % (
         translation, detected_language['language'], str(post_id)) 
    

    Iの差を加えることなく、また追加。確認するために実行する前に、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の文字列を変換することもできます。例えば。

    vars = translation, detected_language['language'].decode("utf8"), str(post_id).decode("utf8") 
    
    関連する問題