【问题标题】:SQL query output to .csvSQL 查询输出到 .csv
【发布时间】:2018-04-16 21:22:45
【问题描述】:

我正在从 python API 运行 SQL 查询,并希望以结构化(标题下的列数据).CSV 格式收集数据。

这是我目前的代码。

sql = "SELECT id,author From researches WHERE id < 20 " 
cursor.execute(sql)
data = cursor.fetchall()
print (data)
with open('metadata.csv', 'w', newline='') as f_handle:
    writer = csv.writer(f_handle)
    header = ['id', 'author']
    writer.writerow(header)
    for row in data:
        writer.writerow(row)

现在数据正在控制台上打印,但没有进入 .CSV 文件,这就是我得到的output

我错过了什么?

【问题讨论】:

  • 你有什么问题? Python 有csv.writer 可以将 CSV 写入文件,因此您只需将 SQL 结果读入列表即可。
  • 到目前为止你有什么尝试?
  • 问题是我不知道该怎么做。您能帮我提供基于此查询的示例代码吗?
  • 我已经编辑了代码。现在我能够获取数据,但将其写入 .csv 文件我遇到了困难。
  • 查看the docs 中的示例。我不确定,但您也许可以将光标中的行直接写入csv.writer()

标签: python api csv export-to-csv


【解决方案1】:

这是您尝试做的一个简单示例:

import sqlite3 as db
import csv

# Run your query, the result is stored as `data`
with db.connect('vehicles.db') as conn:
    cur = conn.cursor()
    sql = "SELECT make, style, color, plate FROM vehicle_vehicle"
    cur.execute(sql)
    data = cur.fetchall()

# Create the csv file
with open('vehicle.csv', 'w', newline='') as f_handle:
    writer = csv.writer(f_handle)
    # Add the header/column names
    header = ['make', 'style', 'color', 'plate']
    writer.writerow(header)
    # Iterate over `data`  and  write to the csv file
    for row in data:
        writer.writerow(row)

【讨论】:

  • 谢谢,@diek。只有一个问题,在获取数据中的所有内容之后。我们以“vehicle.csv”的形式打开这个文件来自哪里以及它在扮演什么角色?我的意思是我们还没有将数据写入“vehicle.csv”所以..?
  • @Hayat Python 将创建该文件。它所扮演的角色是回答你的问题,你想创建一个 csv 文件。
  • @Hayat 我在代码中添加了 cmets,希望这能帮助您理解。阅读本文将帮助您更好地理解docs.python.org/3/tutorial/inputoutput.html
【解决方案2】:
import pandas as pd

import numpy as np

from sqlalchemy import create_engine

from urllib.parse import quote_plus

params = quote_plus(r'Driver={SQL Server};Server=server_name;                        Database=DB_name;Trusted_Connection=yes;')

engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)

sql_string = '''SELECT id,author From researches WHERE id < 20 '''

final_data_fetch = pd.read_sql_query(sql_string, engine)

final_data_fetch.to_csv('file_name.csv')

希望这会有所帮助!

【讨论】:

  • 使用 Pandas 可以更快速、更轻松地使用 python 处理数据,希望这段代码有所帮助,我每天在工作中使用它来连接数据库
  • 如果您要提取大量数据(至少对我来说确实如此),此方法速度较慢并会导致更多内存错误,但对于较小的数据来说是一种更好的方法
【解决方案3】:

您可以将所有结果转储到 csv 文件而无需循环:

data = cursor.fetchall()
...
writer.writerows(data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2020-08-03
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多