python - psycopg2:如何知道 cur.rowcount 何时不表示行数?

标签 python postgresql psycopg2

我正在寻找一种方法来以编程方式确定描述可获取的行数与受影响的行数的 cur.rowcount 之间的差异。

例如:

>>> cur.execute('CREATE TABLE test (gid serial, val numeric);')
>>> cur.execute('INSERT INTO test (val) values (1), (2), (3);')
>>> cur.execute('SELECT * FROM test;'); cur.rowcount
3
>>> cur.execute('UPDATE test SET val = 1;'); cur.rowcount
3
>>> cur.fetchall()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
psycopg2.ProgrammingError: no results to fetch

>>> cur.execute('DELETE FROM test;'); cur.rowcount
3

>>> cur.execute('DROP TABLE test;')
>>> cur.rowcount
-1

使用 Python 2.7 和 psycopg2 2.6.2。

最佳答案

区别至少在理论上很简单rowcount将为所有 DQL(数据查询语言)和 DML(数据操作语言)查询(您的 SELECTUPDATEDELETE 等)。 -1 用于DDL(数据定义语言)查询 - (CREATE, DROP, ALTER 等)。

换句话说,如果您实际操作数据,您可以期望定义rowcount(意思是>=0);如果您使用数据库/表架构 - 您将拥有 rowcount = -1

就确定 fetchall() 何时工作或不工作而言,您始终可以使用 EAFP approach。 - 尝试执行 fetchall() 并处理 ProgrammingError

另见:

关于python - psycopg2:如何知道 cur.rowcount 何时不表示行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41108082/

相关文章:

sql - Postgres - 有时只想在小数分隔符左侧显示一个数字

database - 如何将 postgreSQL 中的数据库转换为 utf8?

python-3.x - 无法打开扩展控制文件 citext.control

python - 多个参数 psycopg2 where 子句 - 语法错误

python - 使用带有 lambda 函数的 map() 格式化键值

python - 如何提高时间序列重合过滤的性能?

python - 使用 Python 录制或播放音频无法在 Mac 上运行 : No Errors & No Sound

php - 在 Windows 中使用 PHP 和 Postgres 开发 Web 应用程序与在 Linux 中开发 Web 应用程序相同吗?

python - Psycopg2 使用 pip 安装有效但无法在 OS X 10.9 上导入模块

python - 如何拒绝Python中的随机数?