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

Python无法将Azure SQL表转换为Pandas DataFrame求助

问题分析

报错根源是调用pd.read_sql时传入了ODBC原生连接字符串conxn,新版本pandas的read_sql函数若接收字符串参数,会默认通过SQLAlchemy解析为数据库URL,但ODBC连接字符串不符合SQLAlchemy的URL格式规范,导致解析失败。

你已经通过pyodbc成功建立了连接对象conn,完全可以直接复用这个已有的连接完成DataFrame转换。

修复方案

修改pd.read_sql的第二个参数,将conxn替换为已建立的连接对象conn即可:

import pyodbc
import pandas as pd 

server = 'xxxx.database.windows.net'
database = 'xxx'
username = 'bxxxx'
password = 'bxxx'

conxn = 'Driver={ODBC Driver 18 for SQL Server};Server='+server+';Database='+database+';Encrypt=yes;UID='+username+';Pwd='+password+';TrustServerCertificate=no;Connection Timeout=30'

# 已成功建立的连接对象
conn = pyodbc.connect(conxn)
cursor = conn.cursor()

query = "SELECT * FROM dbo.outsource;"

# 传入连接对象conn而非连接字符串conxn
df = pd.read_sql(query, conn)
print(df.head(10))
可选方案(SQLAlchemy方式)

若希望用SQLAlchemy管理连接,需将ODBC连接字符串转换为SQLAlchemy兼容的URL格式,示例如下:

from sqlalchemy import create_engine
import pandas as pd

# 构造SQLAlchemy兼容的URL
connection_url = f"mssql+pyodbc://{username}:{password}@{server}/{database}?driver=ODBC+Driver+18+for+SQL+Server&encrypt=yes&TrustServerCertificate=no&Connection+Timeout=30"
engine = create_engine(connection_url)

query = "SELECT * FROM dbo.outsource;"
df = pd.read_sql(query, engine)
print(df.head(10))

注意:如果密码包含@、:等特殊字符,需要进行URL转义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:45:59