【问题标题】:Writing pandas to SQL Server via Linux server using Python使用 Python 通过 Linux 服务器将 pandas 写入 SQL Server
【发布时间】:2020-08-12 23:13:05
【问题描述】:

我能够使用以下方法从 SQL Server 成功读取:

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()

数据存在,我可以按照我想要的方式成功地操作数据。但是当我尝试像这样通过sqlalchemy 写入同一个 SQL Server 时:

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.exc.ArgumentError: 无法从字符串 DSN=test4SERVER 解析 rfc1738 URL; UID=用户1;密码=abcdef

任何帮助表示赞赏。

【问题讨论】:

    标签: python sql-server linux sqlalchemy


    【解决方案1】:

    我通常使用 pyodbc 写回 SQL 表。 你可以使用这样的东西:

    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()
    

    【讨论】:

      【解决方案2】:

      向 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)
      

      【讨论】:

        猜你喜欢
        • 2020-09-01
        • 1970-01-01
        • 2020-05-15
        • 1970-01-01
        • 2018-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-02
        相关资源
        最近更新 更多