Панды to_sql для MS SQL - PullRequest
       43

Панды to_sql для MS SQL

0 голосов
/ 11 февраля 2019

Я пытаюсь сохранить фрейм данных в MS SQL, который использует аутентификацию Windows.Я пытался использовать engine, engine.connect(), engine.raw_connection(), и все они выдают ошибки: 'Engine' object has no attribute 'cursor', 'Connection' object has no attribute 'cursor' и Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': ... соответственно.

params = urllib.parse.quote('DRIVER={ODBC Driver 13 for SQL Server};'
                           'SERVER=server;'
                           'DATABASE=db;'
                           'TRUSTED_CONNECTION=Yes;')

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

df.to_sql(table_name,engine, index=False)

1 Ответ

0 голосов
/ 08 марта 2019

Это будет делать именно то, что вы хотите.

# Insert from dataframe to table in SQL Server
import time
import pandas as pd
import pyodbc

# create timer
start_time = time.time()
from sqlalchemy import create_engine


df = pd.read_csv("C:\\your_path\\CSV1.csv")

conn_str = (
    r'DRIVER={SQL Server Native Client 11.0};'
    r'SERVER=name_of_your_server;'
    r'DATABASE=name_of_your_database;'
    r'Trusted_Connection=yes;'
)
cnxn = pyodbc.connect(conn_str)

cursor = cnxn.cursor()

for index,row in df.iterrows():
    cursor.execute('INSERT INTO dbo.Table_1([Name],[Address],[Age],[Work]) values (?,?,?,?)', 
                    row['Name'], 
                    row['Address'], 
                    row['Age'],
                    row['Work'])
    cnxn.commit()
cursor.close()
cnxn.close()

# see total time to do insert
print("%s seconds ---" % (time.time() - start_time))
...