You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下Python连接远程Windows MSSQL及写入DataFrame问题

Python连接MSSQL:修复pyodbc错误及替代库方案

修复你的pyodbc IM002错误

错误根源是连接字符串的冲突配置:你同时指定了SQL身份验证的UID/PWD和Windows身份验证的Trusted_Connection=yes,Ubuntu环境下无法同时兼容这两种验证方式。另外,Linux下ODBC驱动名称建议用花括号包裹,确保驱动管理器能正确识别。

修正后的连接代码:

import pyodbc
# 删除Trusted_Connection参数,或设置为no
conn_str = 'DRIVER={ODBC Driver 18 for SQL Server};SERVER=192.168.101.56;DATABASE=DEMAND_FORECAST;ENCRYPT=yes;UID=della;PWD=strong;'
conn = pyodbc.connect(conn_str)

若问题仍存在,可检查/etc/odbcinst.ini文件,确认驱动条目是否正确(需与pyodbc.drivers()返回的名称完全一致):

[ODBC Driver 18 for SQL Server]
Description=Microsoft ODBC Driver 18 for SQL Server
Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.3.so.2.1
UsageCount=1

替代pyodbc的连接库

1. SQLAlchemy(适配pandas首选)

SQLAlchemy是ORM框架,与pandas的to_sql方法完美兼容,代码更简洁,适合批量数据写入。

安装依赖:

pip install sqlalchemy pyodbc pandas

连接并写入DataFrame示例:

from sqlalchemy import create_engine
import pandas as pd

# 构造SQLAlchemy连接字符串
engine_str = "mssql+pyodbc://della:strong@192.168.101.56/DEMAND_FORECAST?driver=ODBC+Driver+18+for+SQL+Server&encrypt=yes"
engine = create_engine(engine_str)

# 示例DataFrame
test_df = pd.DataFrame({'id': [1,2,3], 'value': ['x','y','z']})

# 写入数据库表(if_exists可选replace/append/fail)
test_df.to_sql('target_table', con=engine, if_exists='replace', index=False)

2. pymssql

pymssql基于FreeTDS实现,无需依赖ODBC驱动,适合不想配置ODBC环境的场景。

安装:

pip install pymssql pandas

连接及写入示例:

import pymssql
import pandas as pd

# 建立连接
conn = pymssql.connect(
    server='192.168.101.56',
    user='della',
    password='strong',
    database='DEMAND_FORECAST'
)

# 写入DataFrame
test_df = pd.DataFrame({'id': [1,2,3], 'value': ['x','y','z']})
test_df.to_sql('target_table', conn, if_exists='replace', index=False)

conn.close()

注意点

  • pymssql对MSSQL最新版本的兼容性略逊于pyodbc,比如TLS 1.3支持有限
  • 使用SQLAlchemy时,连接字符串中的驱动名称必须与pyodbc.drivers()返回的完全匹配

内容的提问来源于stack exchange,提问作者Della

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:35:28