我正在使用psycopg2库连接到我的postgresql数据库。每次我想执行任何查询时,我都会创建一个新的连接,如下所示:
import psycopg2
def run_query(query):
with psycopg2.connect("dbname=test user=postgres") as connection:
cursor = connection.cursor()
cursor.execute(query)
cursor.close()
但我认为为整个应用程序执行创建一个连接会更快,如下所示:
import psycopg2
connection = psycopg2.connect("dbname=test user=postgres")
def run_query(query):
cursor = connection.cursor()
cursor.execute(query)
cursor.close()
那么,在应用程序的所有执行时间内,哪种方法更好地连接数据库呢?
两种方法我都试过了,都奏效了,但我想知道哪一种更好,为什么。
2条答案
按热度按时间vm0i2vca1#
您应该强烈考虑使用连接池,正如其他答案所建议的那样,这将比每次查询时创建一个连接的成本更低,并且可以处理单靠一个连接无法处理的工作负载。
创建一个名为www.example.com的文件mydb.py,并包含以下内容:
这将允许您按如下方式运行查询:
j5fpnvbx2#
这两种方法都不好。第一种方法尤其不好,因为打开数据库连接的开销很大。第二种方法也不好,因为最后只会得到一个连接(太少了),每个进程或线程一个连接(通常太多了)。
使用连接池。