我正在用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
我正在处理数十万个条目,这需要永远运行。有更快的方法吗?
答案 0 :(得分:1)
您可以做的几件事。首先,不要与每个查询重新建立连接。可以在多个查询中使用它,因此您无需在每个查询中重新创建它。如果仍然希望具有执行查询功能的灵活性,请创建一个类,其中__init__
方法打开连接并将其保留在self.conn中,并创建一个__del__
方法关闭该连接。连接。
对于INSERT操作,如果您将VALUES
与...配合使用,则可以插入多行
INSERT INTO table (fld1, fld2, fld3)
(VALUES ('some', 'data', 'here'),
('more', 'data', 'here'));
psycopg2在这样的查询中将占用很多行。对于SELECT
查询,这取决于您的程序在做什么。根据需求,鉴于这些天计算机上可用的数量,您可以在内存中缓存大量数据。