Windows认证连接SQL Server 2019,pandas read_sql_table报‘表不存在’错误排查
问题:Windows认证连接SQL Server 2019时提示“Table not Found”但表实际存在
我尝试用SQLAlchemy通过Windows认证连接SQL Server 2019实例,目标表明明存在,但执行以下代码时却收到‘Table not Found’错误:
from sqlalchemy.engine import URL import sqlalchemy as sa import pandas as pd connection_string = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=myservername;DATABASE=mydbname;Trusted_Connection=yes" connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": connection_string}) engine = create_engine(connection_url) tablename = "mytablename" df = pd.read_sql_table(tablename, con=engine)
可能的问题及解决方法
未指定表所属架构:SQL Server的表默认归属
dbo架构,若你的表在其他架构下,仅写表名会无法定位。解决方法:- 直接使用
架构名.表名格式,比如"dbo.mytablename"; - 给
pd.read_sql_table添加schema参数:pd.read_sql_table(tablename, con=engine, schema="你的架构名")。
- 直接使用
Windows用户权限不足:即便能成功连接数据库,当前Windows账号可能没有目标表的读取权限。需在SQL Server管理工具中检查该账号对目标表的
SELECT权限是否开启。数据库名称配置错误:确认连接字符串里的
DATABASE=mydbname是否正确,可能误连到了其他数据库导致找不到表。可执行print(engine.execute("SELECT DB_NAME()").fetchone())查看当前连接的数据库名称。ODBC驱动兼容性问题:ODBC Driver 17可能和SQL Server 2019存在兼容性问题,尝试更换为ODBC Driver 18 for SQL Server,同时确保驱动已正确安装。
表名大小写不匹配:若数据库启用了大小写敏感的排序规则,代码中的表名大小写与实际表名不一致会导致查找失败,需严格匹配表名大小写。
pd.read_sql_table不支持特殊表类型:如果目标表是临时表或部分系统表,
pd.read_sql_table无法识别,可改用pd.read_sql_query(f"SELECT * FROM {tablename}", con=engine)执行查询。
内容的提问来源于stack exchange,提问作者ssou
相关产品推荐
相关产品推荐

