zoukankan      html  css  js  c++  java
  • 管理现有数据库-web系统

    1 需求

    现有的业务数据需要经常被展示,所以选择django作为展示工具。只需要使用django自带的admin app,然后对现有数据库进行建模就可以搞定。

    2 代码

    settings:

    DATABASES = {
        # 'default': {
        #     'ENGINE': 'django.db.backends.sqlite3',
        #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        # },
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'mysite',
            'USER': 'root',
            'PASSWORD': 'root',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'OPTIONS': {
                'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            },
        },
        'testconfig': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'config',
            'USER': 'root',
            'PASSWORD': 'root',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'OPTIONS': {
                'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            },
        }
    }
    
    DATABASE_ROUTERS = ['sqlsite.dbrouter.AppRouter']
    DATABASE_APPS_MAPPING = {
        # example:
        #'app_name':'database_name',
        'app': 'testconfig',
        'admin': 'default',
        'auth': 'default',
        'contenttypes': 'default',
        'sessions': 'default',
    }
    #配置两个sql,第一个是dj自用,第二个是用于连接展示库
    #配置db路由,由AppRouter进行配置
    #db映射,将app映射到testconfig,dj自带app映射到default
    

      

    dbrouter.py(和settings同目录)

    from django.conf import settings
    DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING
    
    class AppRouter:
        def db_for_read(self, model, **hints):
            if model._meta.app_label in DATABASE_MAPPING:
                return DATABASE_MAPPING[model._meta.app_label]
            return None
    
        def db_for_write(self, model, **hints):
    
            if model._meta.app_label in DATABASE_MAPPING:
                return DATABASE_MAPPING[model._meta.app_label]
            return None
    
        def allow_relation(self, obj1, obj2, **hints):
    
            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):
    
            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_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
    #这个文件直接cp到任何项目都可以,不用改
    

      

    3 生成数据库模型

     python3 manage.py inspectdb --database=testconfig > app/models.py
    #可以将现有库testconfig 的模型生成到models.py
    #这个功能非常方便,不再需要自己去做模型
    #最后在models.py里添加admin的注册功能,就可以使用admin管理先有库
    

      

    4 bug处理

    4.1 

    admin多表中字段的显示,如果字段太长,它不换行,要换行显示

    base.css:

    /* TABLES */
    
    table {
        border-collapse: collapse;
        border-color: #ccc;
        word-wrap: break-word;
    	word-break: break-all;
    }
    

      

    4.2

    有个数据库连接报错:SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTE。原因是版本低,为5.1。另一个5.6的就不会出现问题。

    解决办法:修改settings里该mysql配置的参数

    'OPTIONS': {
        'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        'isolation_level':None
    },
    #在options里设定事务隔离级别为None
    

      

    4.3

    取回的数据中文乱码,中文写入失败

     由于线上表编码为latin1,所以暂时无解。

    4.4

    使用admin修改字段时,提示字段必须填入内容

    解决办法:在models中的表结构中。在字段里加入,blank=True,意思是可以在django层面允许空。

    然后migrate,重启服务。

     

     参考

    https://www.cnblogs.com/zhangxinqi/p/9094953.html

    https://www.jianshu.com/p/04cd9d4f67a2

  • 相关阅读:
    扁平化职能管理三部曲
    [转载]持续交付和DevOps的前世今生
    敏捷项目管理工具-百度效率云
    敏捷项目管理:基础知识与应用实务
    第8章 “敏捷+”创新创业模式
    第7章 "敏捷+"项目管理
    第6章 迭代循环与项目结束
    第5章 发布循环
    第4章 立项与项目启动
    Windows 2003 + IIS6.0 相关 401.1 或 401.2 等问题解决
  • 原文地址:https://www.cnblogs.com/jabbok/p/9804881.html
Copyright © 2011-2022 走看看