首页 > 解决方案 > 在 python 中对 postgresql 执行多个查询的更快方法

问题描述

我正在用 python 编写一个脚本,我需要多次访问 postgresql 数据库并执行多个选择查询和插入查询。我正在尝试减少此脚本运行所需的时间。

目前我已经编写了一个辅助函数,它传递一个 qry 字符串、一个指示我是否正在插入或接收数据的布尔值以及一个参数列表,然后执行查询:

    def sql_call(qry, insert, inputlist):
        params = config_np()
        with psycopg2.connect(**params) as conn:
            cur = conn.cursor()
            try:
                cur.execute(qry, inputlist)
                if insert:
                    conn.commit()
                    sqlrtn = True
                else:
                    sqlrtn = cur.fetchall()
            except (Exception, psycopg2.DatabaseError) as error:
                print(error)
                quit()
    conn.close()
    return sqlrtn

我正在处理几十万个条目,这需要很长时间才能运行。有更快的方法吗?

标签: pythonpostgresql

解决方案


你可以做几件事。首先,不要与每个查询重新建立连接。这可以用于多个查询,因此您无需为每个查询重新创建它。如果您仍然希望具有执行查询的函数的灵活性,请创建一个类,其中该__init__方法打开连接并将其保存在 self.conn 中,并创建一个__del__关闭连接的方法。

对于 INSERT 操作,如果您使用VALUESwith,则可以插入多行,

INSERT INTO table (fld1, fld2, fld3)
    (VALUES ('some', 'data', 'here'),
            ('more', 'data', 'here'));

psycopg2 在这样的查询中会占用很多行。对于SELECT查询,这取决于您的程序在做什么。根据要求,鉴于这些天计算机上可用的数量,您可以在内存中缓存相当多的数据。


推荐阅读