首页 > 解决方案 > 获取多表计数的 Python 脚本

问题描述

我正在尝试编写一个 python 脚本来获取一些用于监视的表的计数,这些表看起来有点像下面的代码。我正在尝试获得如下所示的输出,并尝试使用 python 多维数组但没有任何运气。

预期输出

('oltptransactions:', [(12L,)])
('oltpcases:', [(24L,)])

脚本

import psycopg2

# Connection with the DataBase
conn = psycopg2.connect(user = "appuser", database = "onedb", host = "192.168.1.1", port = "5432")
cursor = conn.cursor()

sql = """SELECT COUNT(id) FROM appuser.oltptransactions"""
sql2 = """SELECT count(id) FROM appuser.oltpcases"""

sqls = [sql,sql2]
for i in sqls:
    cursor.execute(i)
    result = cursor.fetchall()
    print('Counts:',result)

conn.close()

电流输出

[root@pgenc python_scripts]# python multi_getrcount.py 
('Counts:', [(12L,)])
('Counts:', [(24L,)])

任何帮助表示赞赏。

谢谢!

标签: pythondatabase

解决方案


我有点不愿意展示这种方式,因为最佳实践建议不要构建动态 SQL 字符串,而是始终使用常量字符串和参数,但这是计算字符串合法的一个用例:

  • 表名不能作为 SQL 中的参数
  • 输入仅来自程序本身并完全掌握

可能的代码:

sql = """SELECT count(*) from appuser.{}"""
tables = ['oltptransactions', 'oltpcases']

for t in tables:
    cursor.execute(sql.format(t))
    result = cursor.fetchall()
    print("('", t, "':,", result, ")")

推荐阅读