首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取Django中的DB类型

获取Django中的DB类型
EN

Stack Overflow用户
提问于 2013-12-12 20:40:05
回答 1查看 2.1K关注 0票数 4

我需要能够确定在Django运行时使用的DB类型。

代码语言:javascript
运行
复制
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模型。

代码语言:javascript
运行
复制
from my_app.models import Foo

testing_utility(Foo, **kwargs)

我的testing_utility签名是:

代码语言:javascript
运行
复制
def testing_utility(klass, **kwargs):
    instance = klass(**kwargs)

现在,如果不是hstore DB,我不想在该类上预先形成PostgreSQL特定的功能。这能澄清更多的问题吗?

编辑1:

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

代码语言:javascript
运行
复制
>> print(instance._state.db)
None
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-12 21:45:33

KevinDTimm向我介绍了这个解决方案的第一步。谢谢!

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

但是,如果正在使用的数据库是settings.DATABASES['default'],那么._state.db就是None

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

代码语言:javascript
运行
复制
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'
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20553774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档