pymssql查询SQL Server表报错:无效对象名,求解决方案
解决pymssql查询SQL Server表提示"Invalid object name"的问题
可行解决方案:
1. 用方括号包裹表名与架构名
SQL Server对标识符的解析可能出现异常,用方括号包裹可避免这类问题,修改查询语句为:
SELECT TOP 10 * FROM [dbo].[icZGBookings]
若需指定数据库,同样加上方括号:
SELECT TOP 10 * FROM [A].[dbo].[icZGBookings]
2. 验证连接的当前数据库
虽然代码指定了database='A',但可先确认连接实际指向的数据库:
cursor.execute("SELECT DB_NAME()") print(cursor.fetchone())
如果返回结果不是A,可在查询前手动切换数据库:
cursor.execute("USE A;") cursor.execute("SELECT TOP 10 * FROM dbo.icZGBookings")
3. 排查表名的隐藏字符或大小写问题
部分表名可能包含不可见空格、特殊字符,或创建时使用了区分大小写的定义。在SSMS中执行以下语句查看表名的原始格式:
SELECT name, QUOTENAME(name) FROM sys.tables WHERE name LIKE '%icZGBookings%'
将返回的带引号表名直接复制到Python查询语句中使用。
4. 更换为pyodbc驱动
pymssql基于DB-Lib,对部分SQL Server场景兼容性不如pyodbc,可尝试改用pyodbc连接:
import pyodbc conn = pyodbc.connect( 'DRIVER={ODBC Driver 17 for SQL Server};' 'SERVER=localhost,8888;' 'DATABASE=A;' 'UID=sa;' 'PWD=1234' ) cursor = conn.cursor() cursor.execute("SELECT TOP 10 * FROM dbo.icZGBookings") results = cursor.fetchall() for row in results: print(row) cursor.close() conn.close()
5. 升级pymssql版本
当前使用的pymssql 2.2.7可能存在已知兼容性问题,尝试升级到最新稳定版:
pip install --upgrade pymssql
内容的提问来源于stack exchange,提问作者dimi727
相关产品推荐
相关产品推荐

