소스 검색

分库提交到正式15:52

chenshibin 4 년 전
부모
커밋
c5bb616638
5개의 변경된 파일191개의 추가작업 그리고 54개의 파일을 삭제
  1. 80 0
      Ansjer/database_router.py
  2. 33 15
      Ansjer/formal_settings.py
  3. 39 20
      Ansjer/local_settings.py
  4. 34 16
      Ansjer/test_settings.py
  5. 5 3
      Model/models.py

+ 80 - 0
Ansjer/database_router.py

@@ -0,0 +1,80 @@
+# 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.
+DATABASE_ROUTERS DATABASE_ROUTERS
+    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 DATABASE_MAPPING.get(model._meta.app_label) == db
+        elif model._meta.app_label in DATABASE_MAPPING:
+            return False
+        return None
+
+    # Django 1.7 - Django 1.11
+    def allow_migrate(self, db, app_label, model_name=None, **hints):
+
+        if db in DATABASE_MAPPING.values():
+            return DATABASE_MAPPING.get(app_label) == db
+        elif app_label in DATABASE_MAPPING:
+            return False
+        return None

+ 33 - 15
Ansjer/formal_settings.py

@@ -71,27 +71,45 @@ TEMPLATES = [
 
 
 WSGI_APPLICATION = 'Ansjer.formal_wsgi.application'
 WSGI_APPLICATION = 'Ansjer.formal_wsgi.application'
 
 
+
 # 服务器类型
 # 服务器类型
-# DATABASE_DATA = 'Ansjer81'
-# SERVER_HOST = 'localhost'
-# DATABASES_USER = 'ansjer'
-# DATABASES_PASS = '1234'
 DATABASE_DATA = 'Ansjer81'
 DATABASE_DATA = 'Ansjer81'
-# SERVER_HOST = 'azrdsinstance.clraczw4p0yj.us-west-1.rds.amazonaws.com'
 SERVER_HOST = 'database-2.clraczw4p0yj.us-west-1.rds.amazonaws.com'
 SERVER_HOST = 'database-2.clraczw4p0yj.us-west-1.rds.amazonaws.com'
 DATABASES_USER = 'azrds'
 DATABASES_USER = 'azrds'
 DATABASES_PASS = 'azrds.x.x'
 DATABASES_PASS = 'azrds.x.x'
 
 
-DATABASES = {'default': {
-    'ENGINE': 'django.db.backends.mysql',
-    'NAME': DATABASE_DATA,
-    'USER': DATABASES_USER,
-    'PASSWORD': DATABASES_PASS,
-    'HOST': SERVER_HOST,
-    'PORT': '3306',
-    'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
-    'AUTOCOMMIT': True
-}}
+DATABASE_DATA2 = 'Ansjer81'
+SERVER_HOST2 = 'ansjerpush.clraczw4p0yj.us-west-1.rds.amazonaws.com'
+DATABASES_USER2 = 'azrds'
+DATABASES_PASS2 = 'azrds.x.x'
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': DATABASE_DATA,
+        'USER': DATABASES_USER,
+        'PASSWORD': DATABASES_PASS,
+        'HOST': SERVER_HOST,
+        'PORT': '3306',
+        'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
+        'AUTOCOMMIT': True
+    },
+    'mysql02': {
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': DATABASE_DATA2,
+        'USER': DATABASES_USER2,
+        'PASSWORD': DATABASES_PASS2,
+        'HOST': SERVER_HOST2,
+        'PORT': '3306',
+        'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
+        'AUTOCOMMIT': True
+    }
+}
+DATABASE_ROUTERS = ['Ansjer.database_router.DatabaseAppsRouter']
+DATABASE_APPS_MAPPING = {
+    'db1': 'default',
+    'db2': 'mysql02',
+}
 
 
 AUTH_PASSWORD_VALIDATORS = [
 AUTH_PASSWORD_VALIDATORS = [
     {
     {

+ 39 - 20
Ansjer/local_settings.py

@@ -72,27 +72,46 @@ TEMPLATES = [
 
 
 WSGI_APPLICATION = 'Ansjer.local_wsgi.application'
 WSGI_APPLICATION = 'Ansjer.local_wsgi.application'
 
 
+
 # 服务器类型
 # 服务器类型
-DATABASE_DATA = 'AnsjerLocal'
-SERVER_HOST = '192.168.136.99'
-DATABASES_USER = 'ansjer'
-DATABASES_PASS = 'ansjer.x.x'
-
-# DATABASE_DATA = 'AnsjerLocal'
-# SERVER_HOST = 'localhost'
-# DATABASES_USER = 'root'
-# DATABASES_PASS = '123456'
-
-DATABASES = {'default': {
-    'ENGINE': 'django.db.backends.mysql',
-    'NAME': DATABASE_DATA,
-    'USER': DATABASES_USER,
-    'PASSWORD': DATABASES_PASS,
-    'HOST': SERVER_HOST,
-    'PORT': '3306',
-    'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
-    'AUTOCOMMIT': True
-}}
+DATABASE_DATA = 'ansjerlocal'
+SERVER_HOST = '127.0.0.1'
+DATABASES_USER = 'root'
+DATABASES_PASS = '123456'
+
+DATABASE_DATA2 = 'asjl'
+SERVER_HOST2 = '127.0.0.1'
+DATABASES_USER2 = 'root'
+DATABASES_PASS2 = '123456'
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': DATABASE_DATA,
+        'USER': DATABASES_USER,
+        'PASSWORD': DATABASES_PASS,
+        'HOST': SERVER_HOST,
+        'PORT': '3306',
+        'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
+        'AUTOCOMMIT': True
+    },
+    'mysql02': {
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': DATABASE_DATA2,
+        'USER': DATABASES_USER2,
+        'PASSWORD': DATABASES_PASS2,
+        'HOST': SERVER_HOST2,
+        'PORT': '3306',
+        'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
+        'AUTOCOMMIT': True
+    }
+}
+DATABASE_ROUTERS = ['Ansjer.database_router.DatabaseAppsRouter']
+DATABASE_APPS_MAPPING = {
+    'db1': 'default',
+    'db2': 'mysql02',
+}
+
 
 
 AUTH_PASSWORD_VALIDATORS = [
 AUTH_PASSWORD_VALIDATORS = [
     {
     {

+ 34 - 16
Ansjer/test_settings.py

@@ -72,27 +72,45 @@ TEMPLATES = [
 
 
 WSGI_APPLICATION = 'Ansjer.test_wsgi.application'
 WSGI_APPLICATION = 'Ansjer.test_wsgi.application'
 
 
+
 # 服务器类型
 # 服务器类型
 DATABASE_DATA = 'AnsjerTest'
 DATABASE_DATA = 'AnsjerTest'
 SERVER_HOST = 'database-2.clraczw4p0yj.us-west-1.rds.amazonaws.com'
 SERVER_HOST = 'database-2.clraczw4p0yj.us-west-1.rds.amazonaws.com'
 DATABASES_USER = 'azrds'
 DATABASES_USER = 'azrds'
 DATABASES_PASS = 'azrds.x.x'
 DATABASES_PASS = 'azrds.x.x'
-# 服务器类型
-# DATABASE_DATA = 'AnsjerTest'
-# SERVER_HOST = 'localhost'
-# DATABASES_USER = 'ansjer'
-# DATABASES_PASS = '1234'
-
-DATABASES = {'default': {
-    'ENGINE': 'django.db.backends.mysql',
-    'NAME': DATABASE_DATA,
-    'USER': DATABASES_USER,
-    'PASSWORD': DATABASES_PASS,
-    'HOST': SERVER_HOST,
-    'PORT': '3306',
-    'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
-    'AUTOCOMMIT': True
-}}
+
+DATABASE_DATA2 = 'AnsjerTest'
+SERVER_HOST2 = 'ansjerpush.clraczw4p0yj.us-west-1.rds.amazonaws.com'
+DATABASES_USER2 = 'azrds'
+DATABASES_PASS2 = 'azrds.x.x'
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': DATABASE_DATA,
+        'USER': DATABASES_USER,
+        'PASSWORD': DATABASES_PASS,
+        'HOST': SERVER_HOST,
+        'PORT': '3306',
+        'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
+        'AUTOCOMMIT': True
+    },
+    'mysql02': {
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': DATABASE_DATA2,
+        'USER': DATABASES_USER2,
+        'PASSWORD': DATABASES_PASS2,
+        'HOST': SERVER_HOST2,
+        'PORT': '3306',
+        'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
+        'AUTOCOMMIT': True
+    }
+}
+DATABASE_ROUTERS = ['Ansjer.database_router.DatabaseAppsRouter']
+DATABASE_APPS_MAPPING = {
+    'db1': 'default',
+    'db2': 'mysql02',
+}
 
 
 AUTH_PASSWORD_VALIDATORS = [
 AUTH_PASSWORD_VALIDATORS = [
     {
     {

+ 5 - 3
Model/models.py

@@ -280,7 +280,7 @@ class Access_Log(models.Model):
 
 
 class Equipment_Info(models.Model):
 class Equipment_Info(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
-    devUid = models.CharField(default='', blank=True, max_length=32, verbose_name=u'设备ID')
+    devUid = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'设备ID')
     devNickName = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
     devNickName = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备昵称')
     Channel = models.IntegerField(default=1, blank=True, verbose_name=u'设备通道')
     Channel = models.IntegerField(default=1, blank=True, verbose_name=u'设备通道')
     eventType = models.IntegerField(default=0, blank=True, verbose_name=u'事件类型')
     eventType = models.IntegerField(default=0, blank=True, verbose_name=u'事件类型')
@@ -288,7 +288,7 @@ class Equipment_Info(models.Model):
     alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
     alarm = models.CharField(blank=True, max_length=256, verbose_name=u'报警信息')
     eventTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'设备报警时间')
     eventTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'设备报警时间')
     receiveTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
     receiveTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
-    userID = models.ForeignKey(Device_User, null=True, blank=True, to_field='userID', on_delete=models.CASCADE)
+    userID_id = models.CharField(default='',  db_index=True,blank=True, max_length=32, verbose_name=u'用户ID')
     is_st = models.SmallIntegerField(default=0, verbose_name='是否截图')  # 0 否,1 是图,2,视频
     is_st = models.SmallIntegerField(default=0, verbose_name='是否截图')  # 0 否,1 是图,2,视频
     # message_id = models.CharField(blank=True, max_length=32, default='', verbose_name='第三方推送服务器返回的id')
     # message_id = models.CharField(blank=True, max_length=32, default='', verbose_name='第三方推送服务器返回的id')
     # push_type = models.SmallIntegerField(blank=True, default=0, verbose_name='第三方推送服务器标志。0:APNS推送,1:谷歌推送,2:极光推送')
     # push_type = models.SmallIntegerField(blank=True, default=0, verbose_name='第三方推送服务器标志。0:APNS推送,1:谷歌推送,2:极光推送')
@@ -304,6 +304,7 @@ class Equipment_Info(models.Model):
         verbose_name = u'设备信息推送表'
         verbose_name = u'设备信息推送表'
         verbose_name_plural = verbose_name
         verbose_name_plural = verbose_name
         ordering = ('-id',)
         ordering = ('-id',)
+        app_label = "db2"
 
 
 
 
 class StatResModel(models.Model):
 class StatResModel(models.Model):
@@ -638,7 +639,7 @@ class UID_Preview(models.Model):
 # 系统发送信息新到用户
 # 系统发送信息新到用户
 class SysMsgModel(models.Model):
 class SysMsgModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='自增id')
     id = models.AutoField(primary_key=True, verbose_name='自增id')
-    userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)  # 用户信息
+    userID_id = models.CharField(default='', db_index=True, blank=True, max_length=32, verbose_name=u'用户ID')
     msg = models.TextField(blank=True, default='', verbose_name=u'发送内容')
     msg = models.TextField(blank=True, default='', verbose_name=u'发送内容')
     status = models.SmallIntegerField(verbose_name='是否已读', default=0)  # 0:否,1:是
     status = models.SmallIntegerField(verbose_name='是否已读', default=0)  # 0:否,1:是
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
@@ -651,6 +652,7 @@ class SysMsgModel(models.Model):
         verbose_name = '系统消息'
         verbose_name = '系统消息'
         verbose_name_plural = verbose_name
         verbose_name_plural = verbose_name
         ordering = ('-id',)
         ordering = ('-id',)
+        app_label = "db2"
 
 
 
 
 # 设备推送重构
 # 设备推送重构