如何解决查询数据库时如何使用django-postgrespool2设置的池连接?
我刚刚设置了 django-postgrespool2
,用于在我的 Django 和 PostgreSQL 数据库之间创建连接池。我按照自述指南 here 了解如何安装和配置它。它现在可以工作了,我可以使用 django-postgrespool2
运行我的项目。
然而,我的问题来了。查询数据库时如何验证池连接是否正在使用?连接数据库时应该使用什么代码,有什么不同还是可以使用与以前相同的代码?
我在 settings.py 中的数据库设置,我已将数据库引擎设置为 django_postgrespool2
:
DATABASES = {
'default': {
'ENGINE': 'django_postgrespool2','NAME': env_config.get('DB_NAME'),'OPTIONS': {
'options': '-c search_path=mbraindjango'
},'USER': env_config.get('DB_USER'),'PASSWORD': env_config.get('DB_PASSWORD'),'HOST': env_config.get('DB_HOST'),'PORT': env_config.get('DB_PORT')
}
}
我对 django-postgrespool2
的设置:
DATABASE_POOL_CLASS = 'sqlalchemy.pool.QueuePool'
DATABASE_POOL_ARGS = {
'max_overflow': 10,'pool_size': 5,'recycle': 300
}
我如何连接和查询数据库的代码示例:
def paginateData(self,paginationData,search):
sqlSelect = "SELECT * FROM tablex "
sqlWhere = self.buildCTPagianteSqlWhere(search)
sqlOrderBy = "ORDER BY name "
sqlPagination = "LIMIT %s OFFSET %s;"
sql = sqlSelect + sqlWhere + sqlOrderBy + sqlPagination
sqlParams = self.buildCTPaginateParams(paginationData,search)
cursor = db.cursor("mydatabase",sql,sqlParams)
dataResult = cursor.connect()
return dataResult
以下数据库代码 cursor = db.cursor("mydatabase",sqlParams)
是否实际使用了池连接?还是必须用 django-postgrespool2
编写不同的数据库代码?
来自 Django 的输出示例:
2021-03-08 08:35:50:DEBUG:z.pool: new connection
2021-03-08 08:35:50:DEBUG:z.pool: retrieved from pool
March 08,2021 - 08:35:50
Django version 2.2.5,using settings 'mbrain.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
2021-03-08 08:35:52:DEBUG:z.pool: new connection
2021-03-08 08:35:52:DEBUG:z.pool: retrieved from pool
[08/Mar/2021 08:35:53] "GET /administration/getlineandcellname?lineid=14&cellid=58 HTTP/1.1" 200 77
[08/Mar/2021 08:35:53] "GET /checkuser/?username=tobbe HTTP/1.1" 200 3
2021-03-08 08:35:53:DEBUG:z.pool: returned to pool
[08/Mar/2021 08:35:54] "GET /administration/getlineandcellname?lineid=14&cellid=58 HTTP/1.1" 200 77
[08/Mar/2021 08:35:56] "GET /administration/getlineandcellname?lineid=14&cellid=58 HTTP/1.1" 200 77
2021-03-08 08:35:57:DEBUG:z.pool: retrieved from pool
[08/Mar/2021 08:35:57] "GET /checkuser/?username=tobbe HTTP/1.1" 200 3
2021-03-08 08:35:57:DEBUG:z.pool: returned to pool
[08/Mar/2021 08:35:58] "GET /administration/getlineandcellname?lineid=14&cellid=58 HTTP/1.1" 200 77
我可以在 Django 输出中看到信息,例如 retrieved from pool
。所以它似乎确实有效。但是,我需要帮助验证我是否正确使用了数据库连接池。
谢谢!
解决方法
您可以在 postgresql.conf 中打开设置 log_connections 和 log_disconnections,并检查数据库记录的连接数是否更少,而您的代码正在从池中检出并返回到池中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。