如何从Django视图更改数据库架构?
我希望用户选择数据库字段类型。
答案 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。