相关疑难解决方法(0)

Django:检测数据库后端

我在Django中做了一些需要同时处理sqlite和postgres的"额外"查询.这些查询的语法在后端之间有所不同,但我无法弄清楚我是否将查询发送到postgres或sqlite.

有没有办法获取当前的数据库适配器,以便我可以分支我的代码并为活动数据库服务器发送正确的查询?

database django backend detect

27
推荐指数
1
解决办法
7132
查看次数

在 Django 中获取数据库类型

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

MYSQL = False
if <something goes here>:
    MYSQL = True
Run Code Online (Sandbox Code Playgroud)

我看到了相关的 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)
Run Code Online (Sandbox Code Playgroud)

我的testing_utility签名是:

def testing_utility(klass, **kwargs):
    instance = klass(**kwargs)
Run Code Online (Sandbox Code Playgroud)

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

编辑1:

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

>> print(instance._state.db)
None
Run Code Online (Sandbox Code Playgroud)

python django orm

5
推荐指数
1
解决办法
2461
查看次数

能够检查数据库连接主机或名称(不是数据库名称而是设置)?姜戈

我不是要检查连接的 db 名称,我在 django 中设置了多个数据库,并且还使用它database route来创建一个,failover但我想知道是否可以获取连接主机的名称或指定给设置的名称。 .

例如

DATABASES = {
    'default': {  # trying to get this name 'default'
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'euser',
        'PASSWORD': 'password',
        'HOST': 'host', # trying to get this host name 'host'
        'PORT': 3306,
    },
    'node2': {  # trying to get this name 'node2'
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'euser',
        'PASSWORD': 'password',
        'HOST': 'host2',  # trying to get this host name 'host2'
        'PORT': 3306,
    },
}
Run Code Online (Sandbox Code Playgroud)

有没有可能得到我上面注释掉的那些名字?对于我的故障转移,如果正在使用另一个数据库,我会尝试发送电子邮件,但如果我能得到特别是host这样就更好了,这对我来说会更容易

PS题外话,名字可以改成 …

python mysql database django settings

2
推荐指数
1
解决办法
1268
查看次数

标签 统计

django ×3

database ×2

python ×2

backend ×1

detect ×1

mysql ×1

orm ×1

settings ×1