为什么DB2在删除表中的所有行时返回-1?

为什么DB2在删除表中的所有行时返回-1?,db2,Db2,问题说明了一切。以Python API为例: import ibm_db #setup stuff conn = ibm_connect(DATABASE, user, password) stmt = ibm_db.exec_immediate(conn, 'DELETE FROM sometable') print(ibm_db.num_rows(stmt)) # prints -1 为什么不打印删除的实际行数?DB2中的负SQL代码表示错误: 这并不是一个答案,事实上,只是表明函数确实有

问题说明了一切。以Python API为例:

import ibm_db
#setup stuff
conn = ibm_connect(DATABASE, user, password)
stmt = ibm_db.exec_immediate(conn, 'DELETE FROM sometable')
print(ibm_db.num_rows(stmt)) # prints -1

为什么不打印删除的实际行数?

DB2中的负SQL代码表示错误:

这并不是一个答案,事实上,只是表明函数确实有效,并且SQLCODEs会导致python异常。
num_rows()
不适用于您这一事实可能表明您所连接的数据库可能不支持该功能。您可能需要详细描述您的环境:DB2服务器版本和平台,无论是本地还是远程数据库,DB2客户机版本(如果与服务器不同)等等

>>导入ibm\u db
>>>conn=ibm_db.connect('TEST',user,password)
>>>stmt=ibm_db.exec_immediate(conn,‘创建表t(f int)’)
>>>打印ibm_db.num_rows(stmt)#DDL语句-num_rows不适用
-1
>>>stmt=ibm_db.exec_immediate(conn,'delete from t')
>>>打印ibm_db.num_行(stmt)#删除0行
0
>>>stmt=ibm_db.exec_immediate(conn,'delete from x')#不存在表-异常
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
异常:[IBM][CLI Driver][DB2/LINUXX8664]SQL0204N“USER.X”是未定义的名称。SQLSTATE=42704 SQLCODE=-204
>>>stmt=ibm_db.exec_immediate(conn,'insert-into t(f)值(1)、(2)、(3)'
>>>打印ibm_db.num_rows(stmt)#插入3行
3.
>>>stmt=ibm_db.exec_immediate(conn,'delete from t')
>>>打印ibm_db.num_行(stmt)#删除3行
3.
>>>ibm_db.close(康涅狄格州)
真的
>>> 

是,但它不是SQL代码;它是
num_rows()
调用的返回代码。你可能想看看幕后发生了什么。
  >>> import ibm_db
  >>> conn = ibm_db.connect('TEST',user,password)
  >>> stmt = ibm_db.exec_immediate(conn, 'create table t (f int)')
  >>> print ibm_db.num_rows(stmt)  # DDL statement - num_rows not applicable
  -1
  >>> stmt = ibm_db.exec_immediate(conn,'delete from t')
  >>> print ibm_db.num_rows(stmt)  # 0 rows deleted
  0
  >>> stmt = ibm_db.exec_immediate(conn,'delete from x')  # nonexistent table - exception
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  Exception: [IBM][CLI Driver][DB2/LINUXX8664] SQL0204N  "USER.X" is an undefined name.  SQLSTATE=42704 SQLCODE=-204
  >>> stmt = ibm_db.exec_immediate(conn,'insert into t(f) values (1),(2),(3)')
  >>> print ibm_db.num_rows(stmt)  # 3 rows inserted
  3
  >>> stmt = ibm_db.exec_immediate(conn,'delete from t')
  >>> print ibm_db.num_rows(stmt)  # 3 rows deleted
  3
  >>> ibm_db.close(conn)
  True
  >>>