在Django应用程序中,为每个客户端创建独立的PostgreSQL数据库是一种多租户架构的实现方式。每个客户端拥有自己的数据库实例,这样可以确保数据隔离和安全。自动迁移是指在创建新的客户端数据库时,自动执行数据库模式迁移,以确保数据库结构与Django模型保持一致。
适用于需要高度数据隔离和安全性的多租户应用,例如SaaS平台、企业级应用等。
settings.py
中配置多个数据库连接。# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'default_db',
'USER': 'default_user',
'PASSWORD': 'default_password',
'HOST': 'localhost',
'PORT': '5432',
},
'client_db_1': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'client_db_1',
'USER': 'client_user_1',
'PASSWORD': 'client_password_1',
'HOST': 'localhost',
'PORT': '5432',
},
# 可以继续添加更多客户端数据库配置
}
import psycopg2
from django.conf import settings
def create_client_database(client_id):
db_name = f'client_db_{client_id}'
db_user = f'client_user_{client_id}'
db_password = f'client_password_{client_id}'
conn = psycopg2.connect(
dbname=settings.DATABASES['default']['NAME'],
user=settings.DATABASES['default']['USER'],
password=settings.DATABASES['default']['PASSWORD'],
host=settings.DATABASES['default']['HOST'],
port=settings.DATABASES['default']['PORT']
)
cur = conn.cursor()
cur.execute(f'CREATE DATABASE {db_name}')
cur.execute(f'CREATE USER {db_user} WITH PASSWORD \'{db_password}\'')
cur.execute(f'GRANT ALL PRIVILEGES ON DATABASE {db_name} TO {db_user}')
conn.commit()
cur.close()
conn.close()
# 更新Django数据库配置
settings.DATABASES[db_name] = {
'ENGINE': 'django.db.backends.postgresql',
'NAME': db_name,
'USER': db_user,
'PASSWORD': db_password,
'HOST': settings.DATABASES['default']['HOST'],
'PORT': settings.DATABASES['default']['PORT'],
}
from django.core.management import call_command
def migrate_client_database(client_id):
db_name = f'client_db_{client_id}'
settings.DATABASES['default'] = settings.DATABASES[db_name]
call_command('migrate', database=db_name)
通过以上步骤和示例代码,你可以在Django应用程序中为每个客户端创建独立的PostgreSQL数据库,并在创建客户端时自动执行数据库迁移。
领取专属 10元无门槛券
手把手带您无忧上云