微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“ ProgrammingError:无结果以前的SQL不是查询”尝试截断表时

如何解决“ ProgrammingError:无结果以前的SQL不是查询”尝试截断表时

我正在尝试删除表中的所有条目,但无法执行。 不管是TruncATE还是DELETE关键字都没有关系。发生相同的错误

import pyodbc
conn = pyodbc.connect(
                r'Driver={sql Server};'
                r'Server=' + ip + '\sqlEXPRESS;'
                                  r'Database=...;'
                                  r'UID=...;'
                                  r'PWD=...;',timeout=5)
cursor = conn.cursor()
data = cursor.execute("TruncATE TABLE table_name")

pyodbc.ProgrammingError:无结果。以前的sql不是查询

autocommit设置为True无效。参数化它也不起作用。该连接是正确的,因为SELECT子句可以很好地工作并返回正确的值。截断和删除根本不起作用。 DDBB仍然完整。

从pycharm的Python控制台执行时,每当我尝试访问数据对象时(例如print(data.fetchval())

回溯(最近通话最近): 文件“”,第1行,位于 pyodbc.ProgrammingError:无结果。以前的sql不是查询

我已经阅读过有关DDBB表如何编制索引及其私钥的内容,但是我无法解释。

解决方法

我希望得到受影响的行数。

当我们通过Cursor.execute执行单个SQL语句时,服务器可以返回以下三种情况之一:

    结果集中的
  1. 零个或更多数据行
  2. (用于SELECT语句),或
  3. 整数行计数(用于UPDATE,DELETE等DML语句),或
  4. 一个错误。

我们通过pyodbc方法.fetchall().fetchone().fetchval()等从结果集中检索信息。我们使用游标的rowcount属性检索行计数。 / p>

crsr = cnxn.cursor()
crsr.execute("DROP TABLE IF EXISTS so64124053")
crsr.execute("CREATE TABLE so64124053 (id int primary key,txt varchar(10))")
crsr.execute("INSERT INTO so64124053 (id,txt) VALUES (1,'foo')")
print(crsr.rowcount)  # 1
print(crsr.execute("SELECT COUNT(*) AS n FROM so64124053").fetchval())  # 1
crsr.execute("INSERT INTO so64124053 (id,txt) VALUES (2,'bar')")
print(crsr.rowcount)  # 1
print(crsr.execute("SELECT COUNT(*) AS n FROM so64124053").fetchval())  # 2

请注意,TRUNCATE是一种特殊情况,因为它不会理会从表中删除的行;它只返回-1的行计数...

crsr.execute("TRUNCATE TABLE so64124053")
print(crsr.rowcount)  # -1

...但是行确实已删除

print(crsr.execute("SELECT COUNT(*) AS n FROM so64124053").fetchval())  # 0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。