UnicodeDecodeError in curs.fetchall() beim Port von Python2 auf Python3

From: Andreas Tille <andreas(at)an3as(dot)eu>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: UnicodeDecodeError in curs.fetchall() beim Port von Python2 auf Python3
Date: 2019-10-01 07:28:15
Message-ID: 20191001072815.jwgqjkvbrvguprkc@an3as.eu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Hallo,

ich gebe hier mal ein kurzes Code-Schnipsel bei der Abfrage der Debian
Ultimate Database an, das für Python2 funktioniert hat aber wenn es mit
Python3 ausgeführt wird, einen Fehler wirft. Könnte sein, daß ich mich
damit auch an Python-Experten wenden muß - aber ich versuche es erstmal
hier:

$ cat debug.py
import psycopg2

conn = psycopg2.connect(database="udd")
curs = conn.cursor()

query = """SELECT name, id from carnivore_names cn
WHERE id IN (SELECT id FROM carnivore_names
WHERE id not in (SELECT id FROM carnivore_names_prefered)
GROUP BY id HAVING COUNT(*) > 1)
ORDER BY id;"""
print(query)
curs.execute(query)

for r in curs.fetchall():
print(r)

$ python2 debug.py
SELECT name, id from carnivore_names cn
WHERE id IN (SELECT id FROM carnivore_names
WHERE id not in (SELECT id FROM carnivore_names_prefered)
GROUP BY id HAVING COUNT(*) > 1)
ORDER BY id;
('Roberto C. Sanchez', 6399)
('Roberto C. S\xc3\xa1nchez', 6399)

liefert offensichtlich ein Resultat mit nicht-ASCII Zeichen. Python2 hat
damit kein Problem.

$ python3 debug.py
SELECT name, id from carnivore_names cn
WHERE id IN (SELECT id FROM carnivore_names
WHERE id not in (SELECT id FROM carnivore_names_prefered)
GROUP BY id HAVING COUNT(*) > 1)
ORDER BY id;
Traceback (most recent call last):
File "maintain_names_prefered_debug.py", line 14, in <module>
for r in curs.fetchall():
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 12: ordinal not in range(128)

Nun ist mir bekannt, daß Python3 die Typen byte und string unterscheidet
- aber wenn der Absturz schon bei curs.fetchall() erfolgt, habe ich gar
keine Chance, da irgendwas zu encoden.

Was muß ich an der Abfrage ändern, damit curs.fetchall() nicht abstürzt?

Viele Grüße

Andreas.

--
http://fam-tille.de

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Nicola Tiling 2019-10-27 12:09:41 Tabelle umgruppieren ?
Previous Message Daniel Westermann (DWE) 2019-09-25 12:42:23 Announcing the German-speaking PostgreSQL Conference 2020