Python将SQLAlchemy查询对象写入CSV
我正在批量写入csv文件,由于我目前只有最后一个“批”记录在文件中,无论我是使用Python将SQLAlchemy查询对象写入CSV,python,csv,sqlalchemy,Python,Csv,Sqlalchemy,我正在批量写入csv文件,由于我目前只有最后一个“批”记录在文件中,无论我是使用'w'还是'a'标志打开文件。以下是我的两次尝试: with open('testdump.csv', 'w') as csvfile: fieldnames = ['name', 'price'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader()
'w'
还是'a'
标志打开文件。以下是我的两次尝试:
with open('testdump.csv', 'w') as csvfile:
fieldnames = ['name', 'price']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for date in date_list:
date = date.strftime('%Y-%m-%d')
q1 = db.session.query(...query goes here that depends on date...)
rows = []
for row in q1:
rows.append(
{
'name': row.name,
'price': row.price,
}
)
for row in rows:
writer.writerow(dict(
(k, v.encode('utf-8') if type(v) is unicode else v) for k, v in row.iteritems()
))
这将导致只写入最后一批,并且
csvfile = open('testdump.csv', 'w')
fieldnames = ['name', 'price']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
csvfile.close()
for date in date_list:
date = date.strftime('%Y-%m-%d')
q1 = db.session.query(...query goes here that depends on date...)
rows = []
for row in q1:
rows.append(
{
'name': row.name,
'price': row.price,
}
)
csvfile = open('testdump.csv', 'a+')
for row in rows:
writer.writerow(dict(
(k, v.encode('utf-8') if type(v) is unicode else v) for k, v in row.iteritems()
))
csvfile.close()
这只会导致写入头。有什么想法吗?这个例子与您的第一次尝试类似,创建了一个格式正确的csv文件。我们需要知道查询返回什么以及返回值是如何构造的,以便知道如何修复它
import csv
with open('testdump.csv', 'wb') as csvfile:
fieldnames = ['name', 'price']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
rows = [{"name": "apples", "price": "$5"},
{"name": "oranges", "price": "$4"}]
for row in rows:
writer.writerow(dict(
(k, v.encode('utf-8') if type(v) is unicode else v) for k, v in row.iteritems()
))
你第二次尝试的明显问题是你写的
writer.writerow(dict(
(k, v.encode('utf-8') if type(v) is unicode else v) for k, v in row.iteritems()
))
您正在写入一个已关闭的文件对象,但没有为新文件对象创建新的写入程序。此外,请尝试使用一些打印语句进行调试,并查看从db查询中得到的结果。