1. django orm reverse generated class code
Using the command python manage.py inspectdb > app01/models.py
, pay attention, app01 I have here is the app name.
2.django connect multiple databases
In many cases, a project which is more than one app, also use more than one library, then faced with the problem of connecting multiple databases.
So first is that, how to connect using multiple app to connect multiple databases:
To mysql example:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "db0",
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
},
'db1': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db1',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
},
'db2': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db2',
'USER': 'root',
'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': '3306', }, } # this configuration, the list write: the name of the project works .database_router.DatabaseAppsRouter DATABASE_ROUTERS = [ 'your_project_name.database_router.DatabaseAppsRouter '] DATABASE_APPS_MAPPING = { # should face here is that the name of the app name and the database (registered above) ' app01 ': ' default ', ' app02 ': ' db1 ', ' app03 ': ' the DB2 ', }
In addition, in order to be able to have access to different libraries also need to add a file, write the routing of the database:
In the name of your project / project folder under the file name (Example: For example, I played a project called test_django, then test_django / test_django, that is, and settings.py same directory) , create a file called:
database_router.py
Writing the following code:
# database_router.py
from django.conf import settings
DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING
class 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
# for Django 1.4 - Django 1.6
def allow_syncdb(self, db, model):
"""Make sure that apps only appear in the related database."""
if db in DATABASE_MAPPING.values():
return