1、添加数据库路由分配文件
在项目文件夹里创建‘database_router’文件。将下面的代码复制到该文件里。
from django.conf import settingsdatabase_mapping = settings.database_apps_mappingclass databaseappsrouter(object): """ a router to control all database operations on models for different databases. in case an app is not set in settings.database_apps_mapping, the router will fallback to the `default` database. settings example: database_apps_mapping = {'app1': 'db1', 'app2': 'db2'} """ def db_for_read(self, model, **hints): """"point all read operations to the specific database.""" if model._meta.app_label in database_mapping: return database_mapping[model._meta.app_label] return none def db_for_write(self, model, **hints): """point all write operations to the specific database.""" if model._meta.app_label in database_mapping: return database_mapping[model._meta.app_label] return none def allow_relation(self, obj1, obj2, **hints): """allow any relation between apps that use the same database.""" db_obj1 = database_mapping.get(obj1._meta.app_label) db_obj2 = database_mapping.get(obj2._meta.app_label) if db_obj1 and db_obj2: if db_obj1 == db_obj2: return true else: return false return none def allow_syncdb(self, db, model): """make sure that apps only appear in the related database."" if db in database_mapping.values(): return database_mapping.get(model._meta.app_label) == db elif model._meta.app_label in database_mapping: return false return none def allow_migrate(self, db, app_label, model=none, **hints): """ make sure the auth app only appears in the 'auth_db' database. """ if db in database_mapping.values(): return database_mapping.get(app_label) == db elif app_label in database_mapping: return false return none
2、在settings.py文件中配置多数据库
# database# https://docs.djangoproject.com/en/2.1/ref/settings/#databasesdatabases = { 'default': { 'engine': 'django.db.backends.mysql', 'name': 'django_test', 'host': '127.0.0.1', 'user': 'root', 'password': '123456', 'port': '3306',},#配置第二个数据库 'test': { 'engine': 'django.db.backends.mysql', 'name': 'xsanjiaocheng', 'host': '127.0.0.1', 'user': 'root', 'password': '123456', 'port': '3306', }}
#设置数据库路由,将django_test改为你项目的名称。
database_routers = ['django_test.database_router.databaseappsrouter']
#配置数据库与app的对应关系
database_apps_mapping = { # example: # 'app_name':'database_name', # 'app01': 'test', 'app01': 'default', 'app02': 'test',}
3、在对应的app里的models.py文件里正常创建数据表即可(在创建表时尽量不要使用同样的表名)
app01中的models.py:
class django_test_1(models.model): abc = models.charfield(max_length=20) class meta: app_label='app01'app02中的models.py:class test_1(models.model): tests= models.charfield(max_length=20)
4、生成迁移文件
和以前一样:python manage.py makemigrations
5、迁移数据库
迁移时需指定数据库名
python manage.py migrate database=test
如果针对已创建好的数据库创建对应的models.py文件不用生成迁移文件,直接执行“python manage.py inspectdb > app02/models.py --database=test”的命令即可。
6、操作数据库
1)手动选择数据库
django_test_1.objects.using('default').create(abc='hdajh')
2)自动选择数据库
和以前一样不加using()。
7、 配置urls.py
导入对应app的views.py的文件。最好命名个别名,或者给views.py文件重命名。
其他使用和以前一样。
以上就是python中django操作多数据库的方法(代码)的详细内容。
