Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将SQLAlchemy查询对象写入CSV_Python_Csv_Sqlalchemy - Fatal编程技术网

Python将SQLAlchemy查询对象写入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()

我正在批量写入csv文件,由于我目前只有最后一个“批”记录在文件中,无论我是使用
'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查询中得到的结果。