我需要能够确定在Django运行时使用的DB类型。
MYSQL = False
if <something goes here>:
MYSQL = True
我看到了一张与Django相关的票,但没能完全解决问题。(https://code.djangoproject.com/ticket/18332)
很高兴有一个解决方案,我可以确定它是否是一个MySQL,PostgreSQL,SQLite,Oracle...whatever。
我试过在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)
现在,如果不是hstore
DB,我不想在该类上预先形成PostgreSQL特定的功能。这能澄清更多的问题吗?
编辑1:
谢谢你,KevinDTimm,给我链接。看起来Django模型在实例化时确实有._state.db
。当然,我的实例有一个None
类型。:(
>> print(instance._state.db)
None
发布于 2013-12-12 13:45:33
KevinDTimm向我介绍了这个解决方案的第一步。谢谢!
https://stackoverflow.com/a/18343919/787716建议使用模型的._state.db
参数来确定用于实例化的数据库。
但是,如果正在使用的数据库是settings.DATABASES['default']
,那么._state.db
就是None
。
因此,我能够通过以下方式解决我的问题:
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'
https://stackoverflow.com/questions/20553774
复制