Как записать вывод 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)