如何在视图中更改Django数据库架构?

时间:2019-09-28 00:13:06

标签: python django database django-models django-rest-framework

如何从Django视图更改数据库架构?

我希望用户选择数据库字段类型。

1 个答案:

答案 0 :(得分:0)

首先,settings.py应该看起来像这样:

DATABASES = {
    'default': {
        'NAME': 'schema_name',
        'ENGINE': 'django.db.backends.postgresql',
        'USER': 'postgres',
        'PASSWORD': 'password'
    },
    'foo': {
        'NAME': 'schema_name',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'root',
        'PASSWORD': 'password'
    },
...
}

现在,在您的代码中,您可以手动确定要使用.using方法使用的架构/数据库:

SomeModel.objects.using('foo').all() #this uses "foo"
SomeModel.objects.all() #this uses "default"

对于更复杂的逻辑,您可以创建一个database router来决定在给定场景中使用哪种模式。

更新

您可以通过导入connection来执行raw queries

这是一个示例create语句:

 from django.db import connection
 with connection.cursor() as cursor:
     sql = '''
     CREATE TABLE foo (
     col1 INT,
     col2 VARCHAR(45)
     )'''
     cursor.execute(sql)

使用用户输入创建表时应格外小心。以不安全的方式这样做可能会导致SQL injection以及其他潜在的漏洞,例如stored xss