首页 > 解决方案 > 使用 Python 将数据保存到 CSV - 将仅保存 1 行

问题描述

我有简单的 Python 脚本来将数据保存到 CSV 文件

import csv
import MySQLdb

db = MySQLdb.connect('localhost', db="", user='', passwd='')

cursor = db.cursor()
sql = "SELECT col1, col2, col3, col4, col5 FROM table"

try:
    cursor.execute(sql)

    with open('MyFile.csv', mode='w') as csv_file:
        fieldnames = ['Col1_Name', 'Col2_Name', 'Col3_Name', 'Combined_Col']
        writer = csv.DictWriter(csv_file, fieldnames=fieldnames)

        writer.writeheader()

        results = cursor.fetchall()
        for row in results:
           col1 = row[0]
           col2 = row[1]
           col3 = row[2]
           col4 = row[3]
           col5 = row[4]

           combinedColumns = "%s (count: %s)" % (col4, col5)

           writer.writerow({'Col1_Name': col1, 'Col2_Name' : col2, 'Col3_Name': col3, 'Combined_Col': combinedColumns})

except:
    print("Error: unable to fetch data")

db.close()

print("DONE!")

但它只会保存一行。

我错过了什么?

标签: pythonsqlcsv

解决方案


import csv
import MySQLdb

db = MySQLdb.connect('localhost', db="", user='', passwd='')

cursor = db.cursor()
sql = "SELECT col1, col2, col3, col4, col5 FROM table"

try:
    cursor.execute(sql)

    with open('MyFile.csv', mode='w', newlines='') as csv_file:
        fieldnames = ['Col1_Name', 'Col2_Name', 'Col3_Name', 'Combined_Col']
        writer = csv.writer(csv_file)

        writer.writerow(fieldnames)

        results = cursor.fetchall()
        for row in results:
           col1 = row[0]
           col2 = row[1]
           col3 = row[2]
           col4 = row[3]
           col5 = row[4]

           combinedColumns = "%s (count: %s)" % (col4, col5)

           writer.writerow(row)

except:
    print("Error: unable to fetch data")

db.close()

print("DONE!")

推荐阅读