【问题标题】:pymssql intersect error - Cannot call methods on intpymssql 相交错误 - 无法在 int 上调用方法
【发布时间】: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


【解决方案1】:

问题出在 db 用户上。 python 脚本使用了没有足够权限的用户。使用具有更多权限的其他用户,而不是脚本正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    相关资源
    最近更新 更多