首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从sqlalchemy转储csv

从sqlalchemy转储csv
EN

Stack Overflow用户
提问于 2010-06-02 02:44:12
回答 8查看 33.7K关注 0票数 24

出于某种原因,我想以csv文件的形式从数据库(sqlite3)转储一个表。我使用python脚本和elixir (基于sqlalchemy)来修改数据库。我想知道是否有任何方法可以将我使用的表转储到csv。

我看过sqlalchemy serializer,但它似乎不是我想要的。我做错了吗?我应该在关闭sqlalchemy会话后调用sqlite3 python module转储到一个文件吗?或者我应该用一些自制的东西?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-06-02 03:51:29

有很多方法可以实现这一点,包括对sqlite3实用程序的简单os.system()调用(如果您已经安装了该实用程序),但下面是我在Python中大致要做的事情:

代码语言:javascript
运行
复制
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()
票数 27
EN

Stack Overflow用户

发布于 2010-06-02 04:02:18

稍微修改一下Peter Hansen的回答,使用SQLAlchemy而不是原始数据库访问

代码语言:javascript
运行
复制
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()
票数 37
EN

Stack Overflow用户

发布于 2012-11-07 17:50:40

我将上述示例修改为基于sqlalchemy的代码,如下所示:

代码语言:javascript
运行
复制
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表和结果对象。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2952366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档