По некоторым причинам я хочу вывести таблицу от базы данных (sqlite3) в форме файла CSV. Я использую сценарий Python с эликсиром (на основе sqlalchemy) для изменения базы данных. Я задавался вопросом, существует ли какой-либо способ вывести таблицу, я использую для csv.
Я видел sqlalchemy сериализатор, но это, кажется, не то, что я хочу. Я делаю его неправильно? Я должен назвать модуль sqlite3 python после закрывания моего sqlalchemy сеанса для дампа в файл вместо этого? Или я должен использовать что-то самодельное?
Существует множество способов добиться этого, включая простой os. system()
вызов утилиты sqlite3
, если она у вас установлена, но вот примерно то, что я бы сделал из Python:
import sqlite3
import csv
con = sqlite3.connect('mydatabase.db')
outfile = open('mydump.csv', 'wb')
outcsv = csv.writer(outfile)
cursor = con.execute('select * from mytable')
# dump column titles (optional)
outcsv.writerow(x[0] for x in cursor.description)
# dump rows
outcsv.writerows(cursor.fetchall())
outfile.close()
Немного изменив здесь ответ Питера Хансена, чтобы использовать SQLAlchemy вместо необработанного доступа к базе данных
import csv
outfile = open('mydump.csv', 'wb')
outcsv = csv.writer(outfile)
records = session.query(MyModel).all()
[outcsv.writerow([getattr(curr, column.name) for column in MyTable.__mapper__.columns]) for curr in records]
# or maybe use outcsv.writerows(records)
outfile.close()