Как записать вывод Python SQL в CSV, используя фрейм данных

ИМПОРТНЫЕ МОДУЛИ

import pyodbc
import pandas as pd
import csv

СОЗДАТЬ ПОДКЛЮЧЕНИЕ К MICROSOFT SQL SERVER

msconn = pyodbc.connect(driver='{SQL Server}',
                        server='SERVER',
                        database='DATABASE', 
                        trusted_msconnection='yes')                                                                                                                
cursor = msconn.cursor()

СОЗДАЙТЕ ПЕРЕМЕННЫЕ, КОТОРЫЕ УДЕРЖИВАЮТ SQL

SCRIPT = "SELECT * FROM TABLE"

ПЕЧАТЬ ДАННЫХ

cursor.execute(SCRIPT)
cursor.commit
for row in cursor:
    print (row)

НАПИШИТЕ ВСЕ СТРОКИ С ИМЕНЕЙ КОЛОННЫ В CSV --- НУЖНА ПОМОЩЬ ЗДЕСЬ

2 ответа

Панды

Поскольку pandas поддерживает прямой импорт из RDBMS с именем read_sql, вам не нужно писать это вручную.

from sqlalchemy import create_engine
import pandas as pd

engine = create_engine('mssql+pyodbc://user:pass@mydsn')
df = pd.read_sql(sql='SELECT * FROM ...', con=engine)

Правильный инструмент: odo

Из одо документов

Загрузка файлов CSV в базы данных является решенной проблемой. Это проблема, которая была хорошо решена. Вместо того, чтобы каждый раз запускать собственный загрузчик и тратить вычислительные ресурсы, мы должны использовать собственные загрузчики в базе данных по нашему выбору.

И это работает и наоборот.

from odo import odo

odo('mssql+pyodbc://user:pass@mydsn::tablename','myfile.csv')

Ответ @e4c5 отличный, так как он должен быть быстрее по сравнению с for loop + cursor - Я бы расширил его с сохранением набора результатов в CSV:

...
pd.read_sql(sql='SELECT * FROM TABLE', con=msconn) \
  .to_csv('/path/to/file.csv', index=False)

если вы хотите прочитать все строки (не указав WHERE пункт):

pd.read_sql_table('TABLE', con=msconn).to_csv('/path/to/file.csv', index=False)
Другие вопросы по тегам