Во-первых, 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"
Для более сложной логики, вы можете создать маршрутизатор базы данных решить, какую схему использовать в данном сценарии.
Обновление
Вы можете выполнить необработанные запросы , импортировав connection
.
Вот пример оператора create:
from django.db import connection
with connection.cursor() as cursor:
sql = '''
CREATE TABLE foo (
col1 INT,
col2 VARCHAR(45)
)'''
cursor.execute(sql)
При создании таблиц с использованиемпользовательский ввод.Небезопасное выполнение этого может привести к инъекции SQL и потенциально другим уязвимостям, таким как сохраненный xss .