Speichern Sie die PL / pgSQL-Ausgabe von PostgreSQL in einer CSV-Datei

910

Was ist der einfachste Weg, um PL / pgSQL-Ausgaben aus einer PostgreSQL-Datenbank in einer CSV-Datei zu speichern?

Ich verwende PostgreSQL 8.4 mit pgAdmin III und dem PSQL-Plugin, von dem aus ich Abfragen ausführe.

Hoff
quelle
1
Siehe auch stackoverflow.com/q/1120109/287948
Peter Krauss

Antworten:

1367

Möchten Sie die resultierende Datei auf dem Server oder auf dem Client?

Serverseite

Wenn Sie etwas einfach wiederverwenden oder automatisieren möchten, können Sie den integrierten COPY- Befehl von Postgresql verwenden . z.B

Copy (Select * From foo) To '/tmp/test.csv' With CSV DELIMITER ',' HEADER;

Dieser Ansatz wird vollständig auf dem Remote-Server ausgeführt - er kann nicht auf Ihren lokalen PC schreiben. Es muss auch als Postgres "Superuser" (normalerweise "root" genannt) ausgeführt werden, da Postgres nicht verhindern kann, dass es mit dem lokalen Dateisystem dieses Computers böse Dinge tut.

Das bedeutet nicht, dass Sie als Superuser verbunden sein müssen (Automatisierung wäre ein Sicherheitsrisiko einer anderen Art), da Sie die SECURITY DEFINEROption verwenden könnenCREATE FUNCTION , um eine Funktion zu erstellen, die so ausgeführt wird, als wären Sie ein Superuser .

Der entscheidende Teil ist, dass Ihre Funktion dazu dient, zusätzliche Überprüfungen durchzuführen und nicht nur die Sicherheit zu umgehen. Sie können also eine Funktion schreiben, die genau die Daten exportiert, die Sie benötigen, oder Sie können etwas schreiben, das verschiedene Optionen akzeptiert, solange diese vorhanden sind Treffen Sie eine strenge Whitelist. Sie müssen zwei Dinge überprüfen:

  1. Welche Dateien darf der Benutzer auf der Festplatte lesen / schreiben? Dies kann beispielsweise ein bestimmtes Verzeichnis sein, und der Dateiname muss möglicherweise ein geeignetes Präfix oder eine geeignete Erweiterung haben.
  2. Welche Tabellen sollte der Benutzer in der Datenbank lesen / schreiben können? Dies wird normalerweise durch GRANTs in der Datenbank definiert, aber die Funktion wird jetzt als Superuser ausgeführt, sodass Tabellen, die normalerweise "außerhalb der Grenzen" liegen, vollständig zugänglich sind. Sie möchten wahrscheinlich nicht, dass jemand Ihre Funktion aufruft und Zeilen am Ende Ihrer "Benutzer" -Tabelle hinzufügt ...

Ich habe einen Blog-Beitrag geschrieben, der diesen Ansatz erweitert und einige Beispiele für Funktionen enthält, mit denen Dateien und Tabellen unter strengen Bedingungen exportiert (oder importiert) werden.


Client-Seite

Der andere Ansatz besteht darin , die Dateiverwaltung auf der Clientseite durchzuführen , dh in Ihrer Anwendung oder Ihrem Skript. Der Postgres-Server muss nicht wissen, in welche Datei Sie kopieren, er spuckt nur die Daten aus und der Client legt sie irgendwo ab.

Die zugrunde liegende Syntax hierfür ist der COPY TO STDOUTBefehl, und grafische Tools wie pgAdmin werden ihn für Sie in einen schönen Dialog einschließen.

Der psqlBefehlszeilen-Client verfügt über einen speziellen "Meta-Befehl" \copy, der dieselben Optionen wie der "echte" Befehl verwendet COPY, jedoch im Client ausgeführt wird:

\copy (Select * From foo) To '/tmp/test.csv' With CSV

Beachten Sie, dass keine Beendigung erfolgt ;, da Meta-Befehle im Gegensatz zu SQL-Befehlen durch Zeilenumbrüche beendet werden.

Aus den Dokumenten :

Verwechseln Sie COPY nicht mit der psql-Anweisung \ copy. \ copy ruft COPY FROM STDIN oder COPY TO STDOUT auf und ruft die Daten in einer Datei ab, auf die der psql-Client zugreifen kann. Daher hängen der Dateizugriff und die Zugriffsrechte eher vom Client als vom Server ab, wenn \ copy verwendet wird.

Ihre Anwendungsprogrammiersprache unterstützt möglicherweise auch das Pushen oder Abrufen der Daten, Sie können jedoch im Allgemeinen COPY FROM STDIN/ TO STDOUTinnerhalb einer Standard-SQL-Anweisung nicht verwenden, da es keine Möglichkeit gibt, den Eingabe- / Ausgabestream zu verbinden. PHP PostgreSQL - Handler ( nicht PDO) enthalten sehr einfach pg_copy_fromund pg_copy_toFunktionen , die zu / von einem PHP - Array zu kopieren, die nicht für große Datenmengen effizient sein können.

IMSoP
quelle
131
Offensichtlich erfordert das obige Beispiel manchmal, dass der Benutzer ein Superuser ist. Hier ist eine Version für normale Leute;) Echo "COPY (SELECT * from foo) TO STDOUT with CSV HEADER" | psql -o '/tmp/test.csv' Datenbankname
Drachenfels
10
@Drachenfels: \copyfunktioniert auch - dort sind die Pfade relativ zum Client und es wird kein Semikolon benötigt / erlaubt. Siehe meine Bearbeitung.
krlmlr
3
@IMSoP: Wie würden Sie einer SQL-Funktion (auf Postgres 9.3) eine COPY-Anweisung hinzufügen? Also wird die Abfrage in einer CSV-Datei gespeichert?
jO.
12
Es sieht so aus, als \copymüsste es ein Einzeiler sein. Sie haben also nicht die Schönheit, die SQL so zu formatieren, wie Sie es möchten, und nur eine Kopie / Funktion darum zu legen.
isaaclw
1
@AndreSilva Wie in der Antwort angegeben, \copyhandelt es sich um einen speziellen Meta-Befehl im psqlBefehlszeilen-Client . Bei anderen Clients wie pgAdmin funktioniert dies nicht. Sie werden wahrscheinlich ihre eigenen Werkzeuge haben, wie z. B. grafische Assistenten, um diese Aufgabe zu erledigen.
IMSoP
519

Es gibt verschiedene Lösungen:

1 psqlBefehl

psql -d dbname -t -A -F"," -c "select * from users" > output.csv

Dies hat den großen Vorteil , dass man es über SSH verwenden , kann, wie ssh postgres@host command- hier können Sie erhalten

2 postgres copyBefehl

COPY (SELECT * from users) To '/tmp/output.csv' With CSV;

3 psql interaktiv (oder nicht)

>psql dbname
psql>\f ','
psql>\a
psql>\o '/tmp/output.csv'
psql>SELECT * from users;
psql>\q

Alle von ihnen können in Skripten verwendet werden, aber ich bevorzuge # 1.

4 pgadmin, aber das ist nicht skriptfähig.

Sorin
quelle
32
IMHO ist die erste Option fehleranfällig, da in exportierten Daten kein ordnungsgemäßes Komma-Escape angezeigt wird.
Piohen
4
Auch dann , wenn zitieren psql nicht Zellenwerte, also wenn ANY Ihrer Daten verwendet das Trennzeichen, Ihre Datei beschädigt wird.
Cerin
7
@Cerin -t ist ein Synonym für --tuples-only (deaktivieren Sie das Drucken von Spaltennamen und Fußzeilen für die Ergebniszeilenanzahl usw.) - lassen Sie es
weg
21
Gerade getestet das Komma-escaping Anspruch-es ist wahr, Methode # 1 ist nicht Kommas in Werte entkommen.
MrColes
1
Verwenden Sie auch "\ pset footer", damit die Zeilenanzahl nicht in der Datei
angezeigt wird
94

Stellen Sie im Terminal (während Sie mit der Datenbank verbunden sind) die Ausgabe in die CVS-Datei ein

1) Stellen Sie den Feldtrenner auf ',':

\f ','

2) Setzen Sie das Ausgabeformat nicht ausgerichtet:

\a

3) Nur Tupel anzeigen:

\t

4) Ausgang einstellen:

\o '/tmp/yourOutputFile.csv'

5) Führen Sie Ihre Abfrage aus:

:select * from YOUR_TABLE

6) Ausgabe:

\o

Sie können dann Ihre CSV-Datei an diesem Speicherort finden:

cd /tmp

Kopieren Sie es mit dem scpBefehl oder bearbeiten Sie es mit nano:

nano /tmp/yourOutputFile.csv
Marcin Wasiluk
quelle
4
und \ o um die Konsole erneut zu drucken
Metdos
2
Dadurch wird keine CSV-Datei erstellt, sondern nur die Befehlsausgabe in der Textdatei aufgezeichnet (wodurch sie nicht durch Kommas getrennt wird).
Ruslan Kabalin
@ RuslanKabalin ja, ich habe das gerade bemerkt und die Anweisung zum Erstellen einer durch Kommas getrennten Ausgabe (cvs) geändert
Marcin Wasiluk
5
Ich würde diese Antwort verbessern, indem ich feststelle, dass die Ausgabe "csv" nicht ordnungsgemäß maskiert wird und jedes Mal, wenn ein SQL-Befehl ausgeführt wird, die Ergebnisse mit der Ausgabedatei verknüpft werden.
Danny Armstrong
Was ist mit Zeilenumbrüchen in Feldwerten? Die COPYoder \copyAnsätze werden korrekt behandelt (in Standard-CSV-Format konvertieren). macht dies?
Wildcard
37

Wenn Sie an allen Spalten einer bestimmten Tabelle zusammen mit Überschriften interessiert sind , können Sie verwenden

COPY table TO '/some_destdir/mycsv.csv' WITH CSV HEADER;

Das ist ein bisschen einfacher als

COPY (SELECT * FROM table) TO '/some_destdir/mycsv.csv' WITH CSV HEADER;

die nach meinem besten Wissen gleichwertig sind.

benjwadams
quelle
1
Wenn die Abfrage benutzerdefiniert ist (IE mit Spaltenaliasnamen oder Verknüpfung verschiedener Tabellen), druckt der Header die Spaltenaliasnamen so aus, wie sie auf dem Bildschirm angezeigt werden.
Devy
34

CSV Export Unification

Diese Informationen sind nicht wirklich gut vertreten. Da dies das zweite Mal ist, dass ich dies ableiten muss, werde ich dies hier einfügen, um mich daran zu erinnern, wenn nichts anderes.

Der beste Weg, dies zu tun (CSV aus Postgres herauszuholen), ist die Verwendung des COPY ... TO STDOUTBefehls. Sie möchten es jedoch nicht so machen, wie es in den Antworten hier gezeigt wird. Die korrekte Verwendung des Befehls ist:

COPY (select id, name from groups) TO STDOUT WITH CSV HEADER

Denken Sie nur an einen Befehl!

Es ist großartig für die Verwendung über ssh:

$ ssh psqlserver.example.com 'psql -d mydb "COPY (select id, name from groups) TO STDOUT WITH CSV HEADER"' > groups.csv

Es ist großartig für den Einsatz in Docker über SSH:

$ ssh pgserver.example.com 'docker exec -tu postgres postgres psql -d mydb -c "COPY groups TO STDOUT WITH CSV HEADER"' > groups.csv

Auf dem lokalen Computer ist es sogar großartig:

$ psql -d mydb -c 'COPY groups TO STDOUT WITH CSV HEADER' > groups.csv

Oder im Docker auf dem lokalen Computer?:

docker exec -tu postgres postgres psql -d mydb -c 'COPY groups TO STDOUT WITH CSV HEADER' > groups.csv

Oder auf einem Kubernetes-Cluster im Docker über HTTPS ??:

kubectl exec -t postgres-2592991581-ws2td 'psql -d mydb -c "COPY groups TO STDOUT WITH CSV HEADER"' > groups.csv

So vielseitig, viele Kommas!

Hast du überhaupt?

Ja, hier sind meine Notizen:

Die Kopien

Durch die /copyeffektive psqlAusführung werden Dateivorgänge auf jedem System ausgeführt, auf dem der Befehl ausgeführt wird, als der Benutzer, der ihn ausführt 1 . Wenn Sie eine Verbindung zu einem Remoteserver herstellen, ist es einfach, Datendateien auf dem System zu kopieren, die auf dem Remoteserver ausgeführt psqlwerden.

COPYFührt Dateivorgänge auf dem Server aus, während das Benutzerkonto des Backend-Prozesses (Standard postgres), Dateipfade und Berechtigungen überprüft und entsprechend angewendet werden. Bei Verwendung werden TO STDOUTdann die Dateiberechtigungsprüfungen umgangen.

Beide Optionen erfordern eine anschließende Dateiverschiebung, wenn psql nicht auf dem System ausgeführt werden, auf dem sich die resultierende CSV letztendlich befinden soll. Dies ist meiner Erfahrung nach der wahrscheinlichste Fall, wenn Sie hauptsächlich mit Remote-Servern arbeiten.

Es ist komplexer, so etwas wie einen TCP / IP-Tunnel über ssh zu einem Remote-System für eine einfache CSV-Ausgabe zu konfigurieren, aber für andere Ausgabeformate (binär) ist es möglicherweise besser, /copyüber eine Tunnelverbindung eine lokale Verbindung auszuführen psql. In ähnlicher Weise ist es bei großen Importen COPYwahrscheinlich die leistungsstärkste Option , die Quelldatei auf den Server zu verschieben und zu verwenden .

PSQL-Parameter

Mit psql-Parametern können Sie die Ausgabe wie CSV formatieren, aber es gibt auch Nachteile, wenn Sie daran denken müssen, den Pager zu deaktivieren und keine Header zu erhalten:

$ psql -P pager=off -d mydb -t -A -F',' -c 'select * from groups;'
2,Technician,Test 2,,,t,,0,,                                                                                                                                                                   
3,Truck,1,2017-10-02,,t,,0,,                                                                                                                                                                   
4,Truck,2,2017-10-02,,t,,0,,

Andere Werkzeuge

Nein, ich möchte nur CSV von meinem Server entfernen, ohne ein Tool zu kompilieren und / oder zu installieren.

Joshperry
quelle
1
Wo werden die Ergebnisse gespeichert? Meine Abfrage wird ausgeführt, aber die Datei wird nirgendwo auf meinem Computer angezeigt. Dies ist, was ich tue: KOPIEREN (wählen Sie a, b aus c, wobei d = '1'), um mit CSVHEADER zu arbeiten> abcd.csv
kRazzy R
1
@kRazzyR Die Ausgabe geht an stdout des Befehls psql. Letztendlich ist alles, was Sie mit stdout tun, dort, wo die Daten abgelegt werden. In meinen Beispielen verwende ich '> file.csv', um zu einer Datei umzuleiten. Sie möchten sicherstellen, dass sich der Befehl außerhalb des Befehls befindet, der über den Parameter psql -c an den Server gesendet wird. Siehe das Beispiel 'lokaler Computer'.
Joshperry
Danke für die vollständige Erklärung. Der Kopierbefehl ist mit psql hoffnungslos komplex. Normalerweise verwende ich einen kostenlosen Datenbank-Client (dbeaver Community Edition) zum Importieren und Exportieren von Datendateien. Es bietet nette Mapping- und Formatierungswerkzeuge. Ihre Antwort enthält ausführliche Beispiele für das Kopieren von Remote-Systemen.
Rich Lysakowski PhD
24

Ich musste \ COPY verwenden, weil ich die Fehlermeldung erhalten habe:

ERROR:  could not open file "/filepath/places.csv" for writing: Permission denied

Also habe ich verwendet:

\Copy (Select address, zip  From manjadata) To '/filepath/places.csv' With CSV;

und es funktioniert

Maudulus
quelle
17

psql kann dies für Sie tun:

edd@ron:~$ psql -d beancounter -t -A -F"," \
                -c "select date, symbol, day_close " \
                   "from stockprices where symbol like 'I%' " \
                   "and date >= '2009-10-02'"
2009-10-02,IBM,119.02
2009-10-02,IEF,92.77
2009-10-02,IEV,37.05
2009-10-02,IJH,66.18
2009-10-02,IJR,50.33
2009-10-02,ILF,42.24
2009-10-02,INTC,18.97
2009-10-02,IP,21.39
edd@ron:~$

Siehe man psqlHilfe zu den hier verwendeten Optionen.

Dirk Eddelbuettel
quelle
12
Dies ist keine echte CSV-Datei. Sehen Sie zu, wie sie brennt, wenn die Daten Kommas enthalten. Daher wird die Verwendung der integrierten COPY-Unterstützung bevorzugt. Diese allgemeine Technik eignet sich jedoch als schneller Hack für den Export aus Postgres in anderen abgegrenzten Formaten als CSV.
Greg Smith
17

Neue Version - psql 12 - wird unterstützt --csv.

psql - devel

--csv

Schaltet in den CSV-Ausgabemodus (Comma-Separated Values) um. Dies entspricht dem CSV-Format \ pset .


csv_fieldsep

Gibt das Feldtrennzeichen an, das im CSV-Ausgabeformat verwendet werden soll. Wenn das Trennzeichen im Wert eines Felds angezeigt wird, wird dieses Feld in doppelten Anführungszeichen gemäß den Standard-CSV-Regeln ausgegeben. Der Standardwert ist ein Komma.

Verwendungszweck:

psql -c "SELECT * FROM pg_catalog.pg_tables" --csv  postgres

psql -c "SELECT * FROM pg_catalog.pg_tables" --csv -P csv_fieldsep='^'  postgres

psql -c "SELECT * FROM pg_catalog.pg_tables" --csv  postgres > output.csv
Lukasz Szozda
quelle
16

Ich arbeite an AWS Redshift, das die Funktion nicht unterstützt COPY TO.

Mein BI-Tool unterstützt jedoch tabulatorgetrennte CSVs, daher habe ich Folgendes verwendet:

 psql -h dblocation -p port -U user -d dbname -F $'\t' --no-align -c "SELECT * FROM TABLE" > outfile.csv
calcsam
quelle
11

In pgAdmin III gibt es eine Option zum Exportieren in eine Datei aus dem Abfragefenster. Im Hauptmenü ist es Abfrage -> In Datei ausführen oder es gibt eine Schaltfläche, die dasselbe tut (es ist ein grünes Dreieck mit einer blauen Diskette im Gegensatz zu dem einfachen grünen Dreieck, das nur die Abfrage ausführt). Wenn Sie die Abfrage nicht über das Abfragefenster ausführen, würde ich das tun, was IMSoP vorgeschlagen hat, und den Befehl copy verwenden.

Amanda Nyren
quelle
Die Antwort von IMSoP hat bei mir nicht funktioniert, da ich ein Superadministrator sein musste. Das war ein Vergnügen. Vielen Dank!
Mike
9

Ich habe verschiedene Dinge ausprobiert, aber nur wenige konnten mir die gewünschte CSV mit Header-Details geben.

Hier ist, was für mich funktioniert hat.

psql -d dbame -U username \
  -c "COPY ( SELECT * FROM TABLE ) TO STDOUT WITH CSV HEADER " > \
  OUTPUT_CSV_FILE.csv
pyAddict
quelle
9

Ich habe ein kleines Tool namens geschrieben psql2csv, das das COPY query TO STDOUTMuster kapselt und zu einer korrekten CSV führt. Die Benutzeroberfläche ähnelt psql.

psql2csv [OPTIONS] < QUERY
psql2csv [OPTIONS] QUERY

Es wird angenommen, dass die Abfrage der Inhalt von STDIN (falls vorhanden) oder das letzte Argument ist. Alle anderen Argumente mit Ausnahme der folgenden werden an psql weitergeleitet:

-h, --help           show help, then exit
--encoding=ENCODING  use a different encoding than UTF8 (Excel likes LATIN1)
--no-header          do not output a header
fphilipe
quelle
2
Funktioniert super. Vielen Dank.
AlexM
6

Wenn Sie eine längere Abfrage haben und psql verwenden möchten, fügen Sie Ihre Abfrage in eine Datei ein und verwenden Sie den folgenden Befehl:

psql -d my_db_name -t -A -F";" -f input-file.sql -o output-file.csv
Andres Kull
quelle
FWIW, ich musste verwenden, -F","anstatt -F";"eine CSV-Datei zu generieren, die in MS Excel korrekt geöffnet werden würde
CFL_Jeff
4

Verwenden Sie diesen Befehl, um eine CSV-Datei mit Spaltennamen als HEADER herunterzuladen:

Copy (Select * From tableName) To '/tmp/fileName.csv' With CSV HEADER;
murli
quelle
1

Ich kann DataGrip , eine Datenbank-IDE von JetBrains, nur empfehlen . Sie können eine SQL-Abfrage in eine CSV-Datei exportieren und das SSH-Tunneling problemlos einrichten. Wenn sich die Dokumentation auf "Ergebnismenge" bezieht, bedeutet dies das Ergebnis, das von einer SQL-Abfrage in der Konsole zurückgegeben wird.

Ich bin nicht mit DataGrip verbunden, ich liebe das Produkt einfach!

skeller88
quelle
Ich vermute, dass die Abwertung auf einen Mangel an Kontext / Erklärung zurückzuführen ist, daher habe ich auf die DataGrip-Dokumentation verlinkt. Wenn es einen anderen Grund für die Ablehnung gibt, lassen Sie es mich bitte wissen. Ich habe die oben genannten CLI-Lösungen verwendet und DataGrip ist für kleinere Abfragen bei weitem einfacher.
Skeller88
Das Problem mit DataGrip ist, dass es Ihre Brieftasche in den Griff bekommt. Es ist nicht kostenlos. Probieren Sie die Community Edition von DBeaver unter dbeaver.io aus . Es ist ein plattformübergreifendes FOSS-Datenbanktool für SQL-Programmierer, Datenbankadministratoren und Analysten, das alle gängigen Datenbanken unterstützt: MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Hive, Presto usw.
Rich Lysakowski PhD
Cool, ich werde das überprüfen. Wie wäre es, wenn Sie Ihren Kommentar auch als Antwort erneut veröffentlichen?
Skeller88
0

JackDB , ein Datenbank-Client in Ihrem Webbrowser, macht dies wirklich einfach. Besonders wenn du auf Heroku bist.

Sie können eine Verbindung zu entfernten Datenbanken herstellen und SQL-Abfragen auf diesen ausführen.

                                                                                                                                                       Quelle (Quelle: jackdb.com )Jackdb-Heroku


Sobald Ihre Datenbank verbunden ist, können Sie eine Abfrage ausführen und nach CSV oder TXT exportieren (siehe unten rechts).


Jackdb-Export

Hinweis: Ich bin in keiner Weise mit JackDB verbunden. Ich nutze derzeit ihre kostenlosen Dienste und denke, dass es ein großartiges Produkt ist.

Dennis
quelle
0

Auf Anfrage von @ skeller88 poste ich meinen Kommentar erneut als Antwort, damit er nicht von Leuten verloren geht, die nicht jede Antwort lesen ...

Das Problem mit DataGrip ist, dass es Ihre Brieftasche in den Griff bekommt. Es ist nicht kostenlos. Probieren Sie die Community Edition von DBeaver unter dbeaver.io aus. Es ist ein plattformübergreifendes Datenbank-Tool von FOSS für SQL-Programmierer, Datenbankadministratoren und Analysten, das alle gängigen Datenbanken unterstützt: MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Hive, Presto usw.

Mit DBeaver Community Edition ist es einfach, eine Verbindung zu einer Datenbank herzustellen, Abfragen zum Abrufen von Daten auszugeben und dann die Ergebnismenge herunterzuladen, um sie in CSV, JSON, SQL oder anderen gängigen Datenformaten zu speichern. Es ist ein brauchbarer FOSS-Konkurrent von TOAD für Postgres, TOAD für SQL Server oder Toad für Oracle.

Ich bin nicht mit DBeaver verbunden. Ich mag den Preis und die Funktionalität, aber ich wünschte, sie würden die DBeaver / Eclipse-Anwendung mehr öffnen und es einfacher machen, DBeaver / Eclipse Analyse-Widgets hinzuzufügen, anstatt die Benutzer für das Jahresabonnement bezahlen zu müssen, um Grafiken und Diagramme direkt darin zu erstellen die Anwendung. Meine Java-Codierungsfähigkeiten sind verrostet und ich möchte keine Wochen brauchen, um neu zu lernen, wie man Eclipse-Widgets erstellt, nur um festzustellen, dass DBeaver die Möglichkeit deaktiviert hat, Widgets von Drittanbietern zur DBeaver Community Edition hinzuzufügen.

Haben DBeaver-Benutzer Einblick in die Schritte zum Erstellen von Analyse-Widgets, die der Community Edition von DBeaver hinzugefügt werden sollen?

Rich Lysakowski PhD
quelle
-3
import json
cursor = conn.cursor()
qry = """ SELECT details FROM test_csvfile """ 
cursor.execute(qry)
rows = cursor.fetchall()

value = json.dumps(rows)

with open("/home/asha/Desktop/Income_output.json","w+") as f:
    f.write(value)
print 'Saved to File Successfully'
user9279273
quelle
3
Bitte erläutern Sie, was Sie beim Bearbeiten der Antwort getan haben. Vermeiden Sie die Antwort nur mit Code
GGO
3
Vielen Dank für dieses Code-Snippet, das möglicherweise nur begrenzte kurzfristige Hilfe bietet. Eine richtige Erklärung würde ihren langfristigen Wert erheblich verbessern, indem sie zeigt, warum dies eine gute Lösung für das Problem ist, und es für zukünftige Leser mit anderen, ähnlichen Fragen nützlicher machen. Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen, einschließlich der von Ihnen getroffenen Annahmen.
Toby Speight
2
Dadurch wird eine JSON-Datei erstellt, keine CSV-Datei.
nvoigt