0

问题:我不知道如何以正确的方式运行查询,以便它返回映射字典。该查询将使用来自多个表的计数。

我将 psycopg2 用于 postgresql 数据库,我将使用结果来创建关于这些计数的日常增量的报告。

鉴于此,有人可以提供一个示例来说明如何执行多个查询并返回我可以用于比较目的的字典吗?谢谢!我在这里的某个地方需要一个 for 循环中的图像。

tables = ['table1', 'table2']
def db_query():
    query = "select count(*) from (a_table) where error_string != '';"
    conn = psycopg2.connect(database=db, user=user, password=password, host=host)
    cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
    cur.execute(query, tables)
    output = cur.fetchall()
    conn.close()
    return output
4

1 回答 1

1

我没有使用过 postgresql,所以您可能还想将其作为参考:如何在 python 中存储计数值

话虽如此,请将您的代码重新排列成这样的东西。确保conn全局化,这样您就不必建立多个连接,并确保您也在关闭cur

conn = None    

def driverFunc():
    global conn
    try:
        conn = psycopg2.connect(database=db, user=user, password=password, host=host)
        tables = ['table1', 'table2']
        countDict = {}
        for thisTable in tables:
            db_query(thisTable, countDict)
    finally:
        if not conn == None:
            conn.close()

def db_query(tableName, countDict):
    # Beware of SQL injection with the following line:
    query = "select count(*) from " + tableName + " where error_string != '';"
    cur = None

    try:
        cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
        cur.execute(query)
        countDict[tableName] = int(cur.fetchone())
    finally:
        if not cur == None:
            cur.close()
于 2013-09-24T04:30:23.217 回答