问题描述
我正在尝试删除表中的所有条目,但无法执行。 不管是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")
将autocommit
设置为True
无效。参数化它也不起作用。该连接是正确的,因为SELECT子句可以很好地工作并返回正确的值。截断和删除根本不起作用。 DDBB仍然完整。
从pycharm的Python控制台执行时,每当我尝试访问数据对象时(例如print(data.fetchval())
:
回溯(最近通话最近): 文件“”,第1行,位于 pyodbc.ProgrammingError:无结果。以前的sql不是查询。
我已经阅读过有关DDBB表如何编制索引及其私钥的内容,但是我无法解释。
解决方法
我希望得到受影响的行数。
当我们通过Cursor.execute
执行单个SQL语句时,服务器可以返回以下三种情况之一:
-
结果集中的
- 零个或更多数据行 (用于SELECT语句),或
- 整数行计数(用于UPDATE,DELETE等DML语句),或
- 一个错误。
我们通过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