【发布时间】:2021-06-30 12:30:54
【问题描述】:
我有一个 SQL 语句,当我使用 Server Managament Studio 时可以正常工作并且得到正确的输出:
SELECT BEZ.[BEZNR6]
FROM BEZ BEZ WHERE BEZ.Shape.STIntersects(geometry::Point(483889.0702499999, 5238377.560075896, 32633))= 1;
现在我想在带有 pymssql(2.1.5) 的 Python(2.7.18) 脚本中使用它:
with conn.cursor(as_dict=True) as cursor:
abfrage='''SELECT BEZ.[BEZNR6]
FROM [bd].[bda].[BEZ] BEZ WHERE BEZ.Shape.STIntersects(geometry::Point(%s, %s, 32633))= 1'''
cursor.execute(abfrage, (483889.0702499999, 5238377.560075896))
query = cursor.fetchall()
我收到一条错误消息:
pymssql.OperationalError: (258, 'Cannot call methods on int.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n')
我做错了什么?
【问题讨论】:
-
可能使用
geometry::Point(%s, %s, 32633)将导致geometry::Point('483889.0702499999', '5238377.560075896', 32633)在查询中 - 请注意单引号。您是否尝试过使用%d而不是%s? -
我认为您需要确保参数作为数字传递。
geometry::Point(:1, :2, 32633)呢? -
是的,我尝试了 %d 相同的错误,我也尝试了这个
cursor.execute( '''SELECT BEZ.[BEZNR6] FROM [bd].[bda].[BEZ] BEZ WHERE BEZ.[Shape].STIntersects(geometry::Point(483889.0702499999,5238377.560075896,32633))=1''') query=cursor.fetchall() -
您确定 Python 正在连接到您在 SSMS 中测试的同一个 SQL Server 和数据库吗? BEZ 的
Shape是否可能正如错误消息所暗示的那样实际上是int列?
标签: python sql-server pymssql