管理现有数据库-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
管理现有数据库-web系统的更多相关文章
- 用 Django 管理现有数据库
在多数项目中,总有一些几乎一成不变的 CRUD 操作,编写这些代码很无聊,但又是整个系统必不可少的功能之一.我们在上一个项目中也面临类似的问题,虽然已经实现了一个功能相对完整的管理后台,也尽量做到了代 ...
- 2017(5)软件架构设计,web系统的架构设计,数据库系统,分布式数据库
试题五(共 25 分) 阅读以下关于 Web 系统架构设计的叙述,在答题纸上回答问题1 至问题 3. [说明] 某公司开发的 B2C 商务平台因业务扩展,导致系统访问量不断增大,现有系统访问速度缓慢, ...
- 关于web系统整体优化提速总结
关于web系统整体优化提速总结 一.背景 随着公司业务的拓展,随之而来就是各种系统横向和纵向的增加,PV.UV也都随之增加,原有的系统架构和模式慢慢遇上了瓶颈,需要逐步的对系统从整体上进行改造升级,通 ...
- web系统整体优化
关于web系统整体优化提速总结 关于web系统整体优化提速总结 一.背景 随着公司业务的拓展,随之而来就是各种系统横向和纵向的增加,PV.UV也都随之增加,原有的系统架构和模式慢慢遇上了瓶颈,需要 ...
- (系统架构)标准Web系统的架构分层
标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...
- 大型web系统数据缓存设计
1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计却并不容易:所以接下来将讨论一下应用系统缓存的设计方面应该注意哪些东西,包括缓存的选型.常见缓存系统的特点和数 ...
- 浅谈大型web系统架构
动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统. ...
- 标准Web系统的架构分层
标准Web系统的架构分层 – 转载请注明出处 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求 ...
- web系统权限设计
应该有七张表 1.appSystem 表: 主要在多系统中的 统一权限管理:主要就是系统的URL USE [Star_Permission] GO /****** 对象: Table [dbo].[A ...
随机推荐
- sipp 对asterisk 进行压力测试
测试环境 asterisk 192.168.106.170 版本astrisk1.8 sipp 192.168.106.141 sipp版本3.3 安装依赖包yum install make g ...
- codevs 1046 旅行家的预算
传送门 1046 旅行家的预算 1999年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold题解 题目描述 Des ...
- 2.CSS 颜色代码大全
确实使用,不用重复造轮子了!!! 摘自:http://www.cnblogs.com/circlebreak/p/6140602.html
- sqlserver 截取字符串
**/*******/*****/1399/* 我要取第3个'/'与第4个'/'中的内容,就是1399 create table ta( col varchar(100)) insert ta sel ...
- 关于group_concat函数拼接字符超长的问题
昨天测试的人火急火燎的找我,跟我说数据不对!说明情况后我去查看,原来是数据上有个子查询出来的字段没有完全展示 问题很明显,就是数据被截断了.下面贴上我写的查询 wyids_是正确的显示,通过它子查询出 ...
- error:: undefined reference to symbol '__glewBufferSubData' 未定义的引用 以及 error: main.o: undefined reference to symbol 'glTexImage2D'
在把DSO移植到QT工程中,出现了 /usr/bin/ld: KeyFrameDisplay.o: undefined reference to symbol '__glewBufferSubData ...
- 菜鸟-@responsebody 理解-用法
@responsebody表示该方法的返回结果直接写入HTTP response body中一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@respo ...
- 4、css之position
一.position position属性:指定一个元素(静态的,相对的,绝对或固定)的定位方法的类型. 1.fixed值 fixed值:生成固定定位的元素,相对于浏览器窗口进行定位.元素的位置通过 ...
- 【Hadoop】HDFS笔记(二):HDFS的HA机制和Federation机制
HA解决了HDFS的NameNode的单点问题: Federation解决了整个HDFS集群中只有一个名字空间,并且只有单独的一个NameNode管理所有DataNode的问题. 一.HA机制(Hig ...
- Flutter实战视频-移动电商-03.底部导航栏制作
03.底部导航栏制作 material是谷歌退出的 还有另外的一种:cupertino是IOS的风格 我们底部的导航栏,静态的widget是不合适的,这垃圾我们用到动态的widget 这重新改成动态的 ...