我需要能够确定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)
现在,hstore
如果不是PostgreSQL DB ,我不想在此类上执行特定的功能。这会清除更多吗?
编辑1:
谢谢KevinDTimm提供的链接。看起来Django模型._state.db
在实例化时确实具有。当然,我的实例有一个None
类型。:(
>> print(instance._state.db)
None
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'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句