Запись pandas на SQL Сервер через Linux сервер с использованием Python - PullRequest
0 голосов
/ 29 апреля 2020

Я могу успешно читать с сервера SQL, используя следующее:

import numpy as np
import pandas as pd
import pyodbc as db

sql_conn = db.connect('DSN=test4SERVER; UID=user1; PWD=abcdef')
query = '''
select * from testdb.dbo.Products
'''
data = pd.read_sql(query, sql_conn)
sql_conn.close()

Данные существуют, и я могу успешно манипулировать данными так, как я хочу. Но когда я пытаюсь записать на тот же SQL сервер через sqlalchemy, например:

data1 = data[['ProductId', 'Name']]
from sqlalchemy import create_engine
engine = create_engine(DSN=test4SERVER; UID=user1; PWD=abcdef) 
conn = engine.connect()
data1.to_sql('test_pyload2',con=conn, if_exists = 'replace', index = False)

, я получаю следующую ошибку:

sqlalchemy.ex c .ArgumentError: Не удалось проанализировать URL-адрес rfc1738 из строки DSN = test4SERVER; UID = user1; PWD = abcdef

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Поможет ли вам добавить кодировку в create_engine?

driver = 'ODBC+Driver+17+for+SQL+Server'
enc='utf-8'
conn_string = r'mssql+pyodbc://{0}:{1}@{2}/{3}?driver={4}?charset={5}'.format(username,password,server,dbname,driver,enc)
engine = create_engine(conn_string, encoding = enc)
df.to_sql(name=tablename, con=engine, chunksize=1000)
0 голосов
/ 29 апреля 2020

Я обычно пишу обратно в SQL таблицы, используя pyodb c. Вы можете использовать что-то вроде этого:

cnxn = pyodbc.connect('DRIVER={SQL 
Server};SERVER=Your_Server;DATABASE=YourDB;Trusted_Connection=yes')

cursor = cnxn.cursor()


for index, row in your_dataset.iterrows():
    cursor.execute("INSERT into yourSQLtable([column1],[column2]) values (?,?)",
                  row ['python_data_set_column1'],
                  row ['python_data_set_column2'])
cnxn.commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...