获取 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 许可协议

阅读 700
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 许可协议

推荐问题