一、场景:
1.数据库已存在,如何自动生成models.py?
2.SQL不熟,如何操作不熟悉的数据库,如Oracle、Greenplum?
3.借助Django ORM 模型,让操作数据库如此简单!
二、操作流程
0.设已存在MySQL数据库 jing_dong,对SQL不熟的你,想通过ORM操作复杂SQL
1.创建一个新的Django工程
2.在settings.py文件中配置数据为jing_dong,如:
DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } # 配置Mysql 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', # 数据库主机 'PORT': 3306, # 数据库端口 'USER': 'root', # 数据库用户名 'PASSWORD': 'root', # 数据库用户密码 'NAME': 'jing_dong' # 数据库名字 } }
3.根据数据库自动生成模型 python manage.py inspectdb > models.py
4.创建子应用视图测试:
from django.http import HttpResponse
from users.models import Goods
# http://127.0.0.1:8000/users/index/
def index(request):
good_list = Goods.objects.all()
goods = []
for good in good_list:
good_dict = {}
good_dict['id_'] = good.id
good_dict['name'] = good.name
goods.append(good_dict)
return HttpResponse(f'{goods}')
5.浏览器访问效果:
参考资料:https://www.cnblogs.com/smiling-crying/p/9237452.html
1.python manage.py inspectdb # 可查看生成的models语句
2.python manage.py inspectdb > models.py # 将框架自动生成的models导入到文件
3.删除meta class中的managed = Flase,让Django对数据库进行管理
class User(BaseModel):
"""用户表"""
id = models.BigAutoField(primary_key=True)
name = models.CharField(max_length=255, verbose_name='用户名')
pwd = models.CharField(max_length=255, verbose_name='密码')
content_user = models.CharField(max_length=255)
content_phone = models.CharField(max_length=255)
content_mail = models.CharField(max_length=255)
content_address = models.CharField(max_length=255)
type = models.IntegerField(verbose_name='type:0 广告主,1 流量主,2 管理员')
uid = models.BigIntegerField(verbose_name='操作者id')
session_key = models.CharField(max_length=64, blank=True, null=True)
session_key2 = models.CharField(max_length=64, blank=True, null=True)
session_expire_date = models.DateTimeField(blank=True, null=True, verbose_name='session过期日期')
class Meta:
managed = False # 删除此行,让Django对数据库进行管理
db_table = 'user'
verbose_name = '用户'
verbose_name_plural = verbose_name
4.python manage.py migrate
5.进入shell环境进行测试:python manage.py shell,发现一切OK