【发布时间】:2018-07-27 02:07:35
【问题描述】:
我正在尝试使用 SQLAlchemy 建立与 PostgreSQL 数据库的连接,执行 SQL 查询并将文件的输出打印到 linux 中的文件。
from sqlalchemy import create_engine
import yaml
import csv
outfile = open('/path/filename.csv', 'wb')
outcsv = csv.writer(outfile, delimiter='\t')
with open('config.yml') as f:
cfg = yaml.safe_load(f)
username = cfg['credentials']['username']
password = cfg['credentials']['password']
host = cfg['credentials']['host']
port = cfg['credentials']['port']
dbname = cfg['credentials']['dbname']
engine = create_engine('postgresql://{}:{}@{}:{}/{}'.format(username, password, host, port, dbname))
result = engine.execute("""select * from db.tablename """)
# dump column titles (optional)
outcsv.writerow(x[0] for x in result.description)
# dump rows
outcsv.writerows(result.fetchall())
outfile.close()
但是,我收到以下错误消息 - 回溯(最近一次通话最后): 文件“”,第 12 行,在 AttributeError: 'ResultProxy' 对象没有属性 'description'
如果我评论以下命令,我可以成功获得查询结果,但没有标题。 outcsv.writerow(x[0] for x in result.description)
经过研究,我发现了方法——result._metadata.keys 可以生成标题。但是,它会生成某种形式的列表,我无法将其附加为标题。
请告知是否有任何方法可以将文件头以及数据放入 csv 文件中。在回答上述问题时,请考虑我是 Python 初学者这一事实。
【问题讨论】:
-
您可以使用
list(result._metadata.keys)将密钥转换为列表
标签: python sqlalchemy