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

无法通过Python连接AWS MSSQL数据库,寻求解决方案

解决Python连接AWS RDS MSSQL数据库的驱动问题

从你给出的三种报错信息来看,核心问题都是unixODBC驱动管理器找不到对应的MSSQL ODBC驱动——不管是你指定的SQL SERVER/SQL Server驱动名称不对,还是没指定驱动时默认找不到数据源,本质都是系统里没装正确的ODBC驱动,或者驱动名称写错了。毕竟你能在SQL IDE里正常连接,说明网络、数据库权限、账号密码都是没问题的,问题就出在Python依赖的ODBC驱动上。

我给你一步步梳理解决方案:

1. 先安装微软官方的MSSQL ODBC驱动

因为你是在类Unix环境(Linux/macOS)下运行代码,必须安装微软官方提供的ODBC驱动,而不是系统默认的驱动。

对于Linux(以Ubuntu为例):

# 导入微软GPG密钥
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
# 添加微软SQL Server软件源
curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
# 更新包列表并安装驱动和unixODBC开发包
sudo apt-get update
sudo apt-get install -y msodbcsql17 unixodbc-dev

如果是其他发行版(比如CentOS),可以找对应版本的安装命令,核心是装msodbcsql17或更高版本的驱动。

对于macOS:

用Homebrew直接安装:

brew install msodbcsql17 mssql-tools

2. 确认正确的驱动名称

安装完成后,执行odbcinst -j命令查看系统ODBC配置路径,打开对应路径下的odbcinst.ini文件,你会看到MSSQL驱动的官方名称,通常是ODBC Driver 17 for SQL Server——这是当前推荐的最新驱动名称,你之前用的SQL SERVER是旧版驱动的名称,现在已经不再适配。

3. 修改代码使用正确的驱动

方法一(pyodbc直接连接)

import pyodbc
server = 'mssqlins.abcdefghklmn.us-north-2.rds.amazonaws.com'
database = 'database'
username = '你的数据库用户名'  # 替换成实际账号
password = '你的数据库密码'  # 替换成实际密码

# 用正确的驱动名称构建连接字符串
conn_str = f'DRIVER={{ODBC Driver 17 for SQL Server}};SERVER={server};DATABASE={database};UID={username};PWD={password}'
try:
    conn = pyodbc.connect(conn_str)
    cursor = conn.cursor()
    sql = """SELECT * FROM dbo.member;"""
    cursor.execute(sql)
    # 读取示例数据
    rows = cursor.fetchall()
    for row in rows:
        print(row)
except Exception as e:
    print(f"连接出错: {e}")
finally:
    if conn:
        conn.close()

方法二(SQLAlchemy + pandas)

import pandas as pd
from sqlalchemy import create_engine
import urllib.parse

server = 'mssqlins.abcdefghklmn.us-north-2.rds.amazonaws.com'
db = 'database'
username = '你的数据库用户名'
password = '你的数据库密码'
# 注意用+替换驱动名称里的空格
driver = 'ODBC+Driver+17+for+SQL+Server'

# 如果密码里有特殊字符(比如@、&),需要URL编码
encoded_password = urllib.parse.quote_plus(password)
# 构建SQLAlchemy连接字符串
engine = create_engine(f'mssql+pyodbc://{username}:{encoded_password}@{server}/{db}?driver={driver}')

myQuery = '''SELECT * FROM deneme'''
try:
    df = pd.read_sql_query(myQuery, engine)
    print(df.head())
except Exception as e:
    print(f"查询出错: {e}")

额外注意点

  • 如果你用的是IAM身份认证连接RDS MSSQL,需要额外生成临时凭证,但你这里用的是账号密码,暂时不用考虑。
  • 确认你的机器安全组已经开放RDS的1433端口(你能在IDE里连接,这个应该没问题,但可以再核对下)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:07:30