python - 在 Django 中获取数据库类型

标签 python django orm

<分区>

我需要能够确定 Django 运行时使用的数据库类型。

MYSQL = False
if <something goes here>:
    MYSQL = True

我看到了相关的 Django 票证,但并没有完全找到我的解决方案。 ( https://code.djangoproject.com/ticket/18332 )

最好有一个解决方案,我可以确定它是 MySQL、PostgreSQL、SQLite、Oracle...等等。

我已经尝试挖掘 django.db 但看不到任何有用的东西。

我将详细说明我正在尝试做的事情,因为它似乎被误解了。这是一个独立于任何 Django 项目的测试实用程序项目。我的实用程序需要了解正在使用哪个数据库来防止非法事件。

例如,我的包支持 PostgreSQL hstore 字段,但在 SQLite 中不存在这样的字段。因此,如果他们使用 SQLite,我不想允许特定功能。

我可以访问他们与该实用程序一起使用的 Django 模型。

from my_app.models import Foo

testing_utility(Foo, **kwargs)

我的testing_utility 签名是:

def testing_utility(klass, **kwargs):
    instance = klass(**kwargs)

现在,如果不是 PostgreSQL 数据库,我不想在此类上预先形成 hstore 特定功能。这是否会更清楚一些?

编辑 1:

感谢 KevinDTimm 提供的链接。看起来 Django 模型在实例化时确实有 ._state.db。当然,我的实例有一个 None 类型。 :(

>> print(instance._state.db)
None

最佳答案

KevinDTimm 带领我迈出了这个解决方案的第一步。谢谢!

https://stackoverflow.com/a/18343919/787716建议使用模型的 ._state.db 参数来确定用于实例化的数据库。

但是,如果正在使用的数据库是 settings.DATABASES['default'],则 ._state.dbNone

所以,我能够通过以下方式解决我的问题:

db_name = 'default'
if instance._state.db is not None:
    db_name = instance._state.db
db_backend = settings.DATABASES[db_name]['ENGINE'].split('.')[-1]
MYSQL = db_backend == 'mysql'

关于python - 在 Django 中获取数据库类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20553774/

相关文章:

Python/Django - 从对象变量值中获取带有索引的列表值

javascript - 使用可选参数对 Where 子句进行后续处理

java - 在 Cayenne 中设置数据库路径

python - 如何过滤数据框中的列表列?

python - 如何扩展使用 AbstractBaseUser 创建的现有自定义用户模型以拥有多种用户类型,例如客户、培训师和作者?

python - 将用户值从一个模板重定向到另一个模板 - Django

java - 不使用 ORM 时如何处理嵌套对象?

python - 使用 cPickle 序列化大型字典会导致 MemoryError

python - 类方法中的装饰器

python - 名称错误 : name 'base' is not defined(haystack search)