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

    Mit dieser Abfrage werden:Typeerror: Argument 1 muss ein String oder Unicode-Objekt

    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') 
    

    Mit psycopg2, wenn ich benutze: cur.execute(query) ich:

    TypeError: argument 1 must be a string or unicode object 
    

    Was ist die beste Option zu verwenden, Abfrage und Übergabe eines Unicode-Wertes. Im Moment parametriere ich bereits die SQL-Abfrage und übergebe das 'u'.

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

    Ich habe auch einen Unterschied, ohne:

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

    Versuchen Sie, den Objektstring als String 'str', nicht' unicode' zu ​​verwenden. Also "UPDATE ..."% (...) 'ohne das anfängliche' u' –

    Antwort

    2

    Das log zeigt ein Tupel von Unicode-Strings, anstatt eine Unicode-String. Versuchen Sie, den Typ query zu protokollieren, bevor Sie ihn zur Überprüfung ausführen.

    Die bevorzugte Art und Weise parametriert Abfrage loggt ist:

    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) 
    

    Sie auch die Saiten der vars in Unicode explizit umwandeln wollen, anstatt auf diese Berufung implizit durchgeführt werden. z.B.

    vars = translation, detected_language['language'].decode("utf8"), str(post_id).decode("utf8") 
    
    Verwandte Themen