Ich schreibe Web-App mit Flask (Python3.4) & psycopg2 Verbindung zu Postgres 9.4 Datenbank.Handle Duplikate Felder in psycopg2
Ich habe Option in meiner Web-App, wo Benutzer ihre eigene Abfrage schreiben und mit Web-App ausführen und Ausgabe in HTML-Tabelle als Antwort erhalten kann.
Ich bin mit Cursor als conn.cursor (cursor_factory = psycopg2.extras.DictCursor) , die ich nicht ändern kann, wie es auch von anderen Teilen des Web-App verwendet wird.
Einer meiner Benutzer schrieb SQL wie unten,
SELECT
name || ' - ' || address,
id,
salary || '; ' || id from company;
Ausgabe von psycopg2 (Falsch):
?column? id ?column?
text integer (4) text
500.55; 1 1 500.55; 1
500.55; 2 2 500.55; 2
500.55; 3 3 500.55; 3
500.55; 4 4 500.55; 4
999.99; 5 5 999.99; 5
Hier ist das Ergebnis, das ich habe falsch ist, aufgrund von Doppel key/Feldname ? Spalte? das zweite Vorkommen überschreibt das erste.
Erwartete Ausgabe war:
?column? id ?column?
text integer (4) text
AAA - XY 1 500.55; 1
BBB - ZZ 2 500.55; 2
ABC - YY 3 500.55; 3
ABC - CC 4 500.55; 4
ABC - DD 5 999.99; 5
Server-Side-Code, die Antwort senden:
# Fetch the column info
if cur.description is not None:
colinfo = [desc for desc in cur.description]
# Any rows?
if cur.rowcount > 0:
result = []
try:
for row in cur:
result.append(dict(row))
except psycopg2.ProgrammingError:
result = None
# response for html table
return Response(
response=json.dumps(colinfo, result),
status=status,
mimetype="text/json"
)
Bitte legen nahe, Wie kann ich dies mit minimaler Codeänderung beheben?
Inzwischen habe ich auch Problem mit psycopg2 angehoben, https://github.com/psycopg/psycopg2/issues/454
Was ist die Frage? – xeor
@xeor Ich habe die Frage aktualisiert. – n33rma