管理现有数据库-web系统
2024-09-03 22:01:26
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
最新文章
- JDBC 详解(转载)
- PYTHON文件操作(二)
- jsonp使用,spring4.x对jsonp的支持
- MySQL找回管理员密码
- 将ecshop中的session机制重写,从DB移植到Memcache中去
- Linux的read命令
- 修改tt模板让ADO.NET C# POCO Entity Generator With WCF Support 生成的实体类继承自定义基类
- android实现文本复制到剪切板功能(ClipboardManager)
- [整理]MongoDB 经常使用命令总结
- 学号:201621123032 《Java程序设计》第9周学习总结(
- codeforces131D
- springboot秒杀课程学习整理1-5
- 【学习】数据规整化:清理、转换、合并、重塑(续)【pandas】
- 最优化方法:共轭梯度法(Conjugate Gradient)
- python 千位分隔符,
- Linux-mail设置
- 2018.10.19 NOIP训练 游戏问题(分组背包)
- 关于Haxe3新特性“内联构造方法”的解释
- C++ 判断
- 学习Android开发看那些书好?
热门文章
- Docker容器的网络连接:
- [HTML &; CSS] HTML和CSS基础知识
- 【CQ18高一暑假前挑战赛2】标程
- SPOJ:Another Longest Increasing Subsequence Problem(CDQ分治求三维偏序)
- Dom4J 解析xml ,类查询
- C++之引用&;的详解
- Activity参数传递
- spark运行模式之一:Spark的local模式安装部署
- linux中的条件变量
- 微信小程序 设置宽度是100%,然后图片能成为正方形的方法。小程序按屏幕比例的正方形