【问题标题】:Django: Detect database backendDjango:检测数据库后端
【发布时间】: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 中提出的那样)。检查设置工作正常,想将其标记为答案,但我不能:)

标签: database django backend detect


【解决方案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 更好,我认为
猜你喜欢
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 2014-02-28
  • 2016-01-05
  • 2012-09-20
  • 2014-09-07
  • 2012-01-27
  • 2017-11-05
相关资源
最近更新 更多