setting配置如下
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "pay",
"USER": "root",
"PASSWORD": "123456",
"HOST": "10.23.xxx.xx",
"PORT": 3306,
},
"ebox": {
"ENGINE": "django.db.backends.mysql",
"NAME": "ebox",
"USER": "root",
"PASSWORD": "123456",
"HOST": "10.23.xxx.xx",
"PORT": 3306,
'OPTIONS': {'charset': 'utf8mb4'},
}
}
DATABASE_ROUTERS = ['customer_admin_api.db_router.AuthRouter', ]
db_router.AuthRouter如下
class AuthRouter:
def db_for_read(self, model, **hits):
db = model.db_name()
return db
def db_for_write(self, model, **hits):
try:
db = model.db_name()
except:
db = "default"
return db
def allow_relation(self, obj1, obj2, **hits):
try:
db1 = obj1.db_name()
except:
db1 = "default"
try:
db2 = obj2.db_name()
except:
db2 = "default"
if db1 == db2:
return True
else:
return False
def allow_migrate(self, db, app_label, model_name=None, **hits):
return True
models如下
class TerminalUserLogs(models.Model):
terminal_id = models.IntegerField()
terminal_code = models.CharField(max_length=255)
user_id = models.IntegerField()
username = models.CharField(max_length=255)
action = models.CharField(max_length=255)
params = models.CharField(max_length=255)
remark = models.CharField(max_length=255)
created_at = models.DateTimeField()
@classmethod
def db_name(cls):
return 'ebox'
class Meta:
managed = False
db_table = "terminal_user_logs"
verbose_name = "用户柜机操作日志表"
setting配置如下
from mongoengine import connect
connect('sms', host='10.23.xxx.xx', port=27017, alias='sms')
connect('user', host='10.23.xxx.xx', port=27017, alias='user')
其中第一个参数为要连接的数据库名称,host和port不过多解释,alias为多mongo库配置的别名
models表中配置如下
from mongoengine import Document, QuerySet as mongo_queryset
from mongoengine import fields as mongo_fields
class UserManager(mongo_queryset):
def get_user_by_id(self, uid):
return self.filter(_id=uid).as_pymongo()
class User(Document):
"""
mongo用户表
"""
_id = mongo_fields.ObjectIdField()
username = mongo_fields.StringField()
status = mongo_fields.IntField()
introduction = mongo_fields.StringField()
gender = mongo_fields.IntField()
nickname = mongo_fields.StringField()
avatar = mongo_fields.StringField()
crts = mongo_fields.IntField()
upts = mongo_fields.IntField()
meta = {'db_alias': 'user', "collection": "user", 'queryset_class': UserManager}
其中db_alias对应setting中alias定义的mongo别名,collection为选择的集合,queryset_class可以自定义模型管理器