关键词:
当程序涉及到数据库相关操作时,我们一般都会这么操作:
(1)创建数据库,设计表结构和字段
(2)使用MySQLdb来连接数据库,并编写数据访问层代码
(3)业务逻辑层去调用数据访问层,执行数据库操作
Django主要通过models类操作数据库,主要通过有以下几个步骤:
1、创建数据库
2、创建表
3、脚本生成,并作用于数据库(此处可能要多次操作)
4、添加数据
5、前端展现
1、创建数据库【参考以前的文档】
2、创建表
前提1:项目名/setting.py中修改django默认的databases配置
DATABASES = ‘default‘: ‘ENGINE‘: ‘django.db.backends.mysql‘, ‘NAME‘: ‘mysql‘, ‘USER‘: ‘root‘, ‘PASSWORD‘: ‘123456‘, ‘HOST‘: ‘192.168.112.54‘, ‘PORT‘: ‘3306‘,
前提2:app目录下,__init__.py添加以下内容:(方便app获取mysql数据内容)
import pymysql pymysql.install_as_MySQLdb()
前提3:自己在excel中整理userinfo表有哪些字段,字段类型以及约束条件等。
【重点】models中,通过class,创建数据表table:userinfo
from django.db import models class userinfo(models.Model): # id,自增长的整型,primary_key定义主键,一个table只有1个主键 id = models.AutoField(primary_key=True) name = models.CharField(null=False, max_length=20) # 字符串类型,不为空,长度20 mobile_no = models.CharField(null=False, max_length=11) # 字符串类型,不为空,长度11 address = models.TextField # model对象第一次被创建时,自动取当前时间,True不可手动更改为其他时间 create_at = models.DateField(auto_now_add=True) # 每次添加/修改实例时,自动保存当前时间,True不可手动更改为其他时间 update_at = models.DateField(auto_now=True) des = models.TextField abanding_flag = models.IntegerField(default=1) # 整型,默认值1
3、生成脚本文件,并脚本作用于mysql
>>> python3 manage.py makemigrations
(说明:相当于在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py,
但是这个改动还没有作用到数据库文件,你可以手动打开这个文件,看看里面是什么)
>>> python3 manage.py migrate
将该改动作用到数据库文件,比如生成table之类
当makemigrations之后产生了0001_initial.py 文件,通过以下命令查看此文件内容
>>> python3 manage.py sqlmigrate theapp 0001
说明:django的改动只能单向作用于mysql,mysql的改动不能反作用于django。
总结:前面两个命令作用,第一个是生成sql脚本,第二个是将脚本作用于mysql。
【验证表是否创建成功】连接到mysql数据库,查看表信息(app名字_userinfo,此处app名字:index)
4、添加数据(3种方式)
往数据库表index_userinfo添加数据(3种添加数据方式)
通过交互模式下,3种添加数据方式
初始化:没有添加数据看到是空的记录
userinfo.objects.all() 返回 <QuerySet[] >
以后每次添加都会看到记录数增加
>>> python3 manage.py shell from django.db import models from index.models import *
info=userinfo() info.name=‘zhangsan‘ info.mobile_no=‘15800002234‘ info.address=‘shanghai‘ info.des=‘test000‘ info.save() userinfo.objects.all() info2=userinfo(name=‘lisi‘,mobile_no=‘15811119999‘) info2.save() userinfo.objects.all() userinfo.objects.create(name=‘lisi‘,mobile_no=‘15822223535‘) userinfo.objects.all()
部分截图
【补充】修改字段值(其他方法请查阅相关资料)
userinfo.objects.filter(mobile_no=‘15822223535‘).update(name=‘wangwu‘)
数据库查看数据:
【补充】如果要修改表字段数据类型,如create_at,修改为DateTimeField,
需要再次用到makemigrations和migrate
# model对象第一次被创建时,自动取当前时间,True不可手动更改为其他时间 create_at = models.DateTimeField(auto_now_add=True)
5、前端展现
(1)app根目录,views.py中添加页面信息
def tests2(request): info = "title": "首页", ‘list‘: [1, 2, 3, ‘hello Django‘], "name": "userinfo" a = userinfo.objects.all() info[‘iii‘] = a return render(request, ‘index12.html‘, info, status=200)
(2)templates目录下,创建HTML文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title> title </title> </head> <body> <section class="content-header"> <h1> 用户 <small>用户基本信息</small> </h1> </section> <section class="content container"> <table class="table table-striped table-bordered table-hover table-checkable order-column" id="sample_1"> <thead> <tr> <th> <label class="mt-checkbox mt-checkbox-single mt-checkbox-outline"> <input type="checkbox" class="group-checkable" data-set="#id_booksTable .checkboxes"/> <span></span> </label> </th> <th> 编号</th> <th> 姓名</th> <th> 电话号码</th> <th> 地址</th> <th> 创建日期</th> <th> 修改日期</th> <th> 描述</th> <th> 状态</th> </tr> </thead> <tbody> </tbody> <tbody> % for item in iii % <tr class="odd gradeX"> <td> <label class="mt-checkbox mt-checkbox-single mt-checkbox-outline"> <input type="checkbox" class="checkboxes" value="1"/> <span></span> </label> </td> <td> item.id </td> <td> item.name </td> <td> item.mobile_no </td> <td> item.address </td> <td> item.create_at|date:"Y-m-d H:i:s" </td> <td> item.update_at|date:"Y-m-d H:i:s" </td> <td> item.des </td> <td> item.abanding_flag </td> </tr> % endfor % </tbody> </table> </section> </body> </html>
(3)urls映射:urls文件里添加
from index import views urlpatterns = [path(‘test2/‘, views.tests2),] # index:app名字
(4)启动django服务
(5)、浏览器访问
对比一下mysql原始数据,两者几乎没有差别
至此,整个操作流程就基本结束了,至于显示样式以及其他交互效果,待后期优化。
-----------------------------------------------------------------------------
特别鸣谢以下大佬:
Anges黎梦 博客地址:https://www.cnblogs.com/AngesZhu/
快捷通道:
想学自动化测试(接口自动化、selenium自动化、appium自动化等)请联系,上海悠悠
悠悠大佬博客:
https://www.cnblogs.com/yoyoketang/
雷总博客:
https://www.cnblogs.com/leiziv5/
django之orm操作数据(代码片段)
单表操作数据表book表classBook(models.Model):title=models.CharField(max_length=32)price=models.DecimalField(max_digits=10,decimal_places=2)publish_date=models.DateField(auto_now_add=True)publish=models.Foreign 查看详情
django之orm跨表操作
一、准备数据库models.py文件内容:from django.db import models# Create your models here.class Book(models.Model): title=models.CharField(max_length=32 查看详情
django之modelform
...rm的合体,所以有以下功能:验证数据字段(Form的功能)数据库操作(Model的功能)model有操作数据库的字段,form验证也有那几个字段,虽然耦合度降低,但是代码是有重复的。如果利用model里的字段,那是不是form里的字段就不... 查看详情
django之modelform(代码片段)
简介Model+Form==>ModelForm。model和form的结合体,所以有以下功能:验证数据库操作Form回顾models.pyclassUserType(models.Model):caption=models.CharField(max_length=32)classUserInfo(models.Model):username=models.CharField(max_le 查看详情
django基础核心技术之model模型的介绍与设计
Django基础核心技术之Model模型的介绍与设计原创:YunboShiPythonWeb与Django开发2018-05-03Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL的配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。今天小... 查看详情
八django之models(译)(代码片段)
...每个模型都是django.db.models.Model的一个子类每个属性代表数据库中的一个字段在这些基础上,D 查看详情
django基础之信号
Django信号很多数情况下,我们需要在操作数据库之前或者之后做某些操作,比如说写个日志之类的,我们当然可以找到每一个sql语句,在其前后加一段代码,但是,这不但浪费时间,还为以后的维护增加了难度,这个时候,就体... 查看详情
django之model操作(代码片段)
...del中如果没有自增列,则自动会创建一个列名为id的列fromdjango.dbimportmodelsclassUserInfo(models.Model):#自动创建一个列名 查看详情
django之model操作(代码片段)
...del中如果没有自增列,则自动会创建一个列名为id的列fromdjango.dbimportmodelsclassUserInfo(models.Model):#自动创建一个列名 查看详情
django之model操作(代码片段)
...del中如果没有自增列,则自动会创建一个列名为id的列fromdjango.dbimportmodelsclassUserInfo(models.Model):#自动创建一个列名 查看详情
django之模型层-多表操作(代码片段)
多表操作数据库表关系一对多:两个表之间的关系一旦确定为一对多,必须在数据多的表中创建关联字段多对多:两个表之间的关系一定确定为多对多,必须创建第三张表(关联表)一对一:一旦两个表之间的关系确定为一对一... 查看详情
django示例之--图书管理操作
示例:实现对图书的添加,删除,修改操作models.py文件内容:from django.db import models# Create your models here.class Book(models.Model): title=models.CharField(m 查看详情
django学习第5篇:django之orm数据库操作注意细节(代码片段)
自己没有记住的一点小知识(ORM查询相关)一、多对多的正反向查询classClass(models.Model):name=models.CharField(max_length=32,verbose_name="班级名")course=models.CharField(verbose_name="课程",max_length=32)def__str__(self):returnself.nameclassTeacher(models.Model):name=... 查看详情
django——模型基础
查询操作是Django的ORM框架中最重要的内容之一。建立模型、保存数据为的就是在需要的时候可以查询得到数据本文的内容基于如下的一个博客应用模型:classUser(models.Model):"""用户表"""username=models.CharField(max_length=32)password=models.Char... 查看详情
django之orm详解(代码片段)
django中内置了orm,可以让我们非常便捷的操作数据库。在看本文前,请确保已经对django项目做了正确的配置。1.在app01下的models.py中新建类fromdjango.dbimportmodels#Createyourmodelshere.classUser(models.Model):#intidprimarykeyauto_incrementid=models.AutoFiel... 查看详情
django之modelform使用(代码片段)
...ModelForm。model和form的结合体,所以有以下功能:数据验证数据库操作model有操作数据库的字段,form验证也有那几个字段,虽然耦合度降低,但是代码是有重复的。如果利用model里的字段,那是不是form里的字段就不用写了。二:下... 查看详情
django之admin中管理models中的表格
Django之admin中管理models中的表格 django中使用admin管理models中的表格时,如何将表格注册到admin中呢?具体操作就是在项目文件夹中的app文件夹中的admin中注册需要管理的表格即可,具体操作如下: admin.py中写入如下代码: ... 查看详情
django框架之orm的相关操作(代码片段)
一、一般操作fromdjango.dbimportmodelsimportdatetime#Createyourmodelshere.classAuthor(models.Model):id=models.AutoField(primary_key=True)name=models.CharField(max_length=20)#以下是测试字段numtest=models.IntegerFiel 查看详情