python - psycopg2 和无限 python 脚本
问题描述
我有一个用 Python 编写的无限脚本,它连接到 Postgresql,并在此人出现在连接到我计算机的摄像头前时插入一条记录。
我想知道连接(和存储连接)到数据库的最佳方式是什么,如果每次有人出现时都需要连接和关闭,或者我是否可以以某种方式存储连接。因为当我在无限循环之前创建连接并且相机前没有活动时,连接保持空闲,并且当脚本想要在一段时间后插入新行时,连接关闭。当我每次要插入新行时都连接,没有问题,但这比较慢。
感谢您的任何建议。
解决方案
连接池适用于这种事情。我没有在生产中使用它(主要使用 Django 或 SQLAlchemy),但psycopg2.pool
包括一些可能适合您需要的不同实现(SimpleConnectionPool
或)。PersistentConnectionPool
一般来说,池不仅有助于将连接作为共享资源进行管理,还可以在需要时测试和重新初始化连接。
from psycopg2 import pool
conn_pool = pool.PersistentConnectionPool(minconn, maxconn, **dbopts)
def work_method():
conn = conn_pool.getconn()
with conn.cursor() as stmt:
stmt.execute(sql)
conn_pool.putconn(conn)
这putconn
非常重要,因此异常不会离开池,认为连接仍在使用中。将其作为上下文管理器处理会很好:
import contextlib
@contextlib.contextmanager
def get_db_connection():
conn = conn_pool.getconn()
yield conn
conn_pool.putconn(conn)
def work_method():
with get_db_connection() as conn:
with conn.cursor() as stmt:
stmt.execute(sql)
希望有帮助。
推荐阅读
- html - 使用 Bootstrap4 弹性填充具有多个 h-100 子级的父级
- javascript - 每个 then() 都应该返回一个值或抛出 Firebase 云函数
- php - Laravel Blade OneToOne 未定义属性
- css - React 如何影响 CSS?
- postgresql - PostgreSQL:比较两组结果不起作用
- c# - 在 Visual Studio 2015 中添加新内容
- haskell - 在haskell中接受/拒绝下推自动机
- database - 在 Postgresql 中插入、更新索引上的查询
- c# - 即使在 PictureBox 上绘制之后,pictureBox1.Image 仍为空
- wordpress - wordpress rest api send empty json file