出于某种原因,我想以csv文件的形式从数据库(sqlite3)转储一个表。我使用python脚本和elixir (基于sqlalchemy)来修改数据库。我想知道是否有任何方法可以将我使用的表转储到csv。
我看过sqlalchemy serializer,但它似乎不是我想要的。我做错了吗?我应该在关闭sqlalchemy会话后调用sqlite3 python module转储到一个文件吗?或者我应该用一些自制的东西?
发布于 2010-06-02 03:51:29
有很多方法可以实现这一点,包括对sqlite3实用程序的简单os.system()调用(如果您已经安装了该实用程序),但下面是我在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()发布于 2010-06-02 04:02:18
稍微修改一下Peter Hansen的回答,使用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()发布于 2012-11-07 17:50:40
我将上述示例修改为基于sqlalchemy的代码,如下所示:
import csv
import sqlalchemy as sqAl
metadata = sqAl.MetaData()
engine = sqAl.create_engine('sqlite:///%s' % 'data.db')
metadata.bind = engine
mytable = sqAl.Table('sometable', metadata, autoload=True)
db_connection = engine.connect()
select = sqAl.sql.select([mytable])
result = db_connection.execute(select)
fh = open('data.csv', 'wb')
outcsv = csv.writer(fh)
outcsv.writerow(result.keys())
outcsv.writerows(result)
fh.close这适用于我的sqlalchemy 0.7.9。我认为这将适用于所有sqlalchemy表和结果对象。
https://stackoverflow.com/questions/2952366
复制相似问题