在python中对Postgresql执行多个查询的更快方法

时间:2019-06-24 21:16:12

标签: 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

我正在处理数十万个条目,这需要永远运行。有更快的方法吗?

1 个答案:

答案 0 :(得分:1)

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

对于INSERT操作,如果您将VALUES与...配合使用,则可以插入多行

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

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