Der folgende Code wird eine Liste von Tupeln iterieren, dass SELECT
(execute
) kehrt zurück.
for row in cursor.execute("SELECT * FROM table"):
write_file.write(row)
ZB.
Wenn Sie eine Datenbank mit Zeilen number
haben, word
, colour
Ihr Code wird eine Schleife über etwas wie folgt aus:
(23, "tree", "red")
(17, "code", "green")
(11, "python", "yellow")
Und was Sie versuchen zu tun ist, schreiben einen Tupel in einer Datei. Sie können nur Zeichenfolgen (oder bytes
) in eine Datei schreiben.
Was Sie tun müssen, ist das Tupel in eine Zeichenfolge zu konvertieren. Dazu können Sie die join()
Funktion verwenden.
Ihr Code sieht nun wie folgt aus:
c.execute("SELECT * FROM table")
table = c.fetchall()
print(table)
#to export as csv file
with open("wub.csv", "wb") as write_file:
cursor = connection.cursor()
for row in cursor.execute("SELECT * FROM table"):
writeRow = " ".join(row)
write_file.write(writeRow)
" ".join(row)
alle Tupelelemente verbinden und trennen sie mit, in diesem Fall einem Raum.
Es gibt ein paar Probleme damit.
Join funktioniert nur mit Listen und Tupeln, die nur Textelemente enthalten (so dass der Code oben würde nicht funktionieren, wenn Ihre Datenbank einen REAL
oder INTEGER
Typen hat)
Sie können nur eine Schleife schreiben, die über jedes Element geht in der Liste und konvertiert es in eine Zeichenfolge.
Ich habe auch eine .encode()
hinzugefügt, weil Sie Ihre CSV-Datei mit "rb"
öffnen, so dass Sie es in bytes
vor dem Schreiben in die Datei konvertieren müssen.
c.execute("SELECT * FROM table")
table = c.fetchall()
print(table)
#to export as csv file
with open("wub.csv", "wb") as write_file:
cursor = connection.cursor()
for row in cursor.execute("SELECT * FROM table"):
writeRow = " ".join([str(i) for i in row])
write_file.write(writeRow.encode())
Schreibt 'write_file.write (", ". Join (row))' fix it? Vielleicht 'write_file.write (", ".Join (Zeile) + "\ n") 'falls es nicht automatisch einen Zeilenumbruch hinzufügt. Wie auch immer, wie der @ cricket_007-Link vermuten lässt, gibt es auch ein Modul für den Umgang mit csv-Dateien. – jDo
Warnung: Wenn Sie Python3 verwenden und die .cvs-Datei im Binärmodus schreiben möchten, müssen Sie die von sqlite zurückgegebenen Strings kodieren Cursor zu Bytes. –