Django:检测数据库后端

Posted

技术标签:

【中文标题】Django:检测数据库后端【英文标题】:Django: Detect database backend 【发布时间】:2013-09-21 16:11:35 【问题描述】:

我在 Django 中做一些需要在 sqlite 和 postgres 上工作的“额外”查询。这些查询的语法因后端而异,但我无法确定我是将查询发送到 postgres 还是 sqlite。

有没有办法获取当前的数据库适配器,以便我可以分支我的代码并为活动的数据库服务器发送正确的查询?

【问题讨论】:

查询接受关键字“使用”,您可以在其中选择应执行查询的数据库。 docs.djangoproject.com/en/dev/topics/db/multi-db 当前数据库在 settings.py 中始终是 DATABASES['default'] 否?并且 DATABASES['default']['ENGINE'] 应该包含引擎类型。 我在考虑一个真正的 API 而不是检查设置(就像 ticket 18332 中提出的那样)。检查设置工作正常,想将其标记为答案,但我不能:) 【参考方案1】:

好的,有两种方法,正如@Ricola3D 所说,可以选择检查settings.DATABASES['default']['ENGINE']

>>> from django.conf import settings
>>> settings.DATABASES['default']['ENGINE']
'django.db.backends.sqlite3' or 'django.db.backends.postgresql_psycopg2'

但连接上还有一个(未记录的)供应商属性:

>>> from django.db import connection
>>> connection.vendor
'postgresql' or 'sqlite'

任何一种方式都有效。我个人更喜欢connection.vendor,因为它看起来更漂亮:)

【讨论】:

运行测试时要小心:使用不同的数据库类型:settings.DATABASES['default']['ENGINE'] 仍将指向非测试数据库。所以connection.vendor(或者,如果你有多个数据库)connections[db_name].vendor 更好,我认为

以上是关于Django:检测数据库后端的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Django 结合WebSocket 进行实时目标检测呢?以yolov5 为例,实现:FPS 25+ (1: 后端)

如何使用Django 结合WebSocket 进行实时目标检测呢?以yolov5 为例,实现:FPS 25+ (1: 后端)

如何使用django 结合websocket 进行实时目标检测呢?以yolov5 为例

如何使用Django 结合WebSocket 进行实时目标检测呢?以yolov5 为例,实现:FPS 25+ (2: 目标检测与发送端)

如何使用Django 结合WebSocket 进行实时目标检测呢?以yolov5 为例,实现:FPS 25+ (2: 目标检测与发送端)

如何使用Django 结合WebSocket 进行实时目标检测呢?以yolov5 为例,实现:FPS 25+ (2: 目标检测与发送端)