获取 psycopg2 count(\*) 个结果

新手上路,请多包涵

获取此查询返回的数字或行的正确方法是什么?我特别想看看是否没有返回任何结果。

 sql = 'SELECT count(*) from table WHERE guid = %s;'
data=[guid]
cur.execute(sql,data)
results = cur.fetchone()
for r in results:
  print type(r) # Returns as string {'count': 0L} Or {'count': 1L}

谢谢。

原文由 Matt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 699
2 个回答

results 本身就是一个行对象,在你的情况下(根据声称的 print 输出判断),一个字典(你可能配置了一个 类似字典的游标子类);只需访问 count 键:

 result = cur.fetchone()
print result['count']

因为您使用 .fetchone() 只返回一行,而不是行列表。

如果您 没有 使用 dict(-like) 行游标,则行是元组,计数值是第一个值:

 result = cur.fetchone()
print result[0]

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 3.0 许可协议

这可能对遇到此线程的人有所帮助,这是一种使用 Python 计算数据库中每个表的所有行的方法:

 total_count = 0

with con.cursor() as cur:
    cur.execute("""SELECT table_name FROM information_schema.tables
           WHERE table_schema = 'public'""")

    for table in cur.fetchall():
        table_name = table[0]
        cur.execute(sql.SQL("SELECT COUNT(*) FROM {table}").format(table=sql.Identifier(table_name)))
        table_count = cur.fetchone()
        result = f'TABLE NAME: {table_name}, COUNT: {table_count}'
        total_count += int(table_count[0])
        print(result)

print(total_count)

原文由 idcabnun 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题