使用mysql连接django首先要配置好相关环境

首先在setting.py配置数据库信息(需要现在mysql中创建一个数据库)

在setting.py那个目录的__init__.py文件中写入

之后就可以在app目录的models.py文件中编写django的模型类

from django.db import models

# Create your models here.
# 1、创建模型类
# 表映射关系 模型类 == 表 属性 == 字段 class User(models.Model):
id = models.AutoField(primary_key=True) # 自增长主键列,默认的
name = models.CharField(max_length=30)
city = models.CharField(max_length=30, default='beijing')
age = models.IntegerField(default=18) # 2、创建一个映射文件(迁移)
# python manage.py makemigrations [appanme]
# 3、 将映射文件的映射数据真正提交到数据库(迁移)
# python manage.py migrate [appname]
def __str__(self):
return 'id=%s, name=%s, city=%s, age=%s' % (self.id, self.name, self.city, self.age)

然后点击

在下面命令行输入

makemigrations [appname] 这个是用来创建映射文件的

在输入

migrate [appname] 这个是将映射数据提交到数据库中

这样数据库中表就建立好了

之后就可以编写增删改查操作了

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from .models import User def add(request):
# # 方法一
# mr = User(name='xuning', city='beijing')
# mr.save() # 保存提交 # 方法二
# mr = User()
# mr.name = 'test1'
# mr.city = 'chengdu'
# mr.save() # 方法三
# User.objects.create(name='test2', city='辽宁')
# User.objects.create(name='test3', city='铁岭') # 方法四
# User.objects.get_or_create(name='test4', city='北京') # 判断你有没有重复的数据 return HttpResponse('添加成功') def select(request):
# 查询所有对象
# rs = User.objects.all()
# print(rs[0]) # 查询单个对象
# rs = User.objects.get(city='长春') # 查询满足条件的对象
# rs = User.objects.filter(name='xuning' or 'test1')
# return HttpResponse('查询成功') # 查询第一条数据
# rs = User.objects.first()
# 查询最后一条数据
# rs = User.objects.last()
# 查询不满足条件的
# rs = User.objects.exclude(name='test2')
# 对于查询结果进行排序
# rs = User.objects.order_by('age')
# 对于查询结果进行排序,反序
# rs = User.objects.order_by('-age')
# 对于查询结果进行排序,多个
# rs = User.objects.order_by('age', 'id')
# 对查询结果转换成字典
# rs = User.objects.all().values()
# 对于查询总数进行计数
# rs = User.objects.all().count() # 查询条件
# 相当于等于
# rs = User.objects.filter(name__exact='test3') # 不区分大小写
# 包含,模糊查询
# rs = User.objects.filter(name__contains='test')
# 以什么开头
# rs = User.objects.filter(name__istartswith='t')
# 以什么结尾
# rs = User.objects.filter(name__iendswith='4')
# 成员所属
# rs = User.objects.filter(age__in=[3, 18, 20])
# rs = User.objects.filter(id__in=[3, 4, 5])
# 大于 大于等于 小于 小于等于
# rs = User.objects.filter(age__lte=18)
# 区间
# rs = User.objects.filter(age__range=(2, 18))
# 切片
rs = User.objects.all()[0:3]
# rs = User.objects.filter(name__contains='tes') & User.objects.filter(id=2)
return render(request, 'db_index.html', context={'rs': rs}) def update(request):
# rs = Dog.objects.get(id=2)
# print(rs)
# rs.name = 'test'
# rs.age = 20
# rs.save() # User.objects.filter(name='test1').update(city='长春')
# User.objects.all().update(city='长春')
# User.objects.filter(id=5).update(name='test5')
# User.objects.filter(id=6).update(name='test6')
# Dog.objects.filter(name='test1').update(age=30) # Course.objects.filter(c_id=1).update(c_name='python')
return HttpResponse('修改成功') def delete(request):
# User.objects.get(name='test').delete()
# Student.objects.all().delete()
# Stu_detail.objects.all().delete()
# Department.objects.all().delete()
# Course.objects.all().delete() return HttpResponse('删除成功')

变关系的实现(一对多, 一对一, 多对多)

先建立表模型


from django.db import models
class Department(models.Model):
d_id = models.AutoField(primary_key=True)
d_name = models.CharField(max_length=30) def __str__(self):
return f'Department<d_id={self.d_id}, d_name={self.d_name}>' class Student(models.Model):
s_id = models.AutoField(primary_key=True)
s_name = models.CharField(max_length=30)
department = models.ForeignKey('Department', on_delete=models.CASCADE, null=True) # 级联删除
# department = models.ForeignKey('Department', on_delete=models.SET_NULL, null=True) # 级联删除
# department = models.ForeignKey('Department', on_delete=models.PROTECT, null=True) # 级联删除
# course = models.ManyToManyField('Course') def __str__(self):
return f'Student<s_id={self.s_id}, s_name={self.s_name}>' class Course(models.Model):
c_id = models.AutoField(primary_key=True)
c_name = models.CharField(max_length=30)
student = models.ManyToManyField('Student') def __str__(self):
return f'Course<c_id={self.c_id}, c_name={self.c_name}>' class Stu_detail(models.Model):
# s_id = models.OneToOneField('Student', on_delete=models.CASCADE)
student = models.OneToOneField('Student', on_delete=models.CASCADE)
age = models.IntegerField()
gender = models.BooleanField(default=1)
city = models.CharField(max_length=30, null=True) def __str__(self):
return f'Stu_detail<s_id={self.student}, age={self.age}, gender={self.gender}, city={self.city}>' # 级联删除 保证数据的完整性与一致性
# on_delete=models.CASCADE 删除主键同时删除外键数据
# on_delete=models.SET_NULL null=True 删除主键同时把外键设置为空
# on_delete=models.PROTECT 如果有外键正在引入主键, 那么主键不允许删除

之后对表关系进行操作

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from .models import User, Department, Student, Course, Stu_detail
def func2(request):
# # 为学院表添加数据
# Department.objects.get_or_create(d_name='软件')
# Department.objects.get_or_create(d_name='化学')
# Department.objects.get_or_create(d_name='物理')
# Department.objects.get_or_create(d_name='数学')
# Department.objects.get_or_create(d_name='语言')
# Department.objects.get_or_create(d_name='历史')
# # 为学生添加数据
# Student.objects.get_or_create(s_name='test1', department_id=1)
# Student.objects.get_or_create(s_name='test2', department_id=1)
# Student.objects.get_or_create(s_name='test3', department_id=1)
# Student.objects.get_or_create(s_name='test4', department_id=2)
# Student.objects.get_or_create(s_name='test5', department_id=2)
# Student.objects.get_or_create(s_name='test6', department_id=3)
# Student.objects.get_or_create(s_name='test7', department_id=4)
# Student.objects.get_or_create(s_name='test8', department_id=5)
# Student.objects.get_or_create(s_name='test9', department_id=6)
# # 为学生信息添加数据
# Stu_detail.objects.get_or_create(age=18, gender=1, city='上海', student_id=1)
# Stu_detail.objects.get_or_create(age=17, gender=0, city='武汉', student_id=2)
# Stu_detail.objects.get_or_create(age=18, gender=1, city='长沙', student_id=3)
# Stu_detail.objects.get_or_create(age=19, gender=1, city='北京', student_id=4)
# Stu_detail.objects.get_or_create(age=16, gender=1, city='长春', student_id=5)
# Stu_detail.objects.get_or_create(age=17, gender=0, city='铁岭', student_id=6)
# Stu_detail.objects.get_or_create(age=18, gender=1, city='南京', student_id=7)
# Stu_detail.objects.get_or_create(age=16, gender=0, city='天津', student_id=8)
# Stu_detail.objects.get_or_create(age=17, gender=1, city='西安', student_id=9)
# # 为课程添加信息
# Course.objects.get_or_create(c_name='pyhton')
# Course.objects.get_or_create(c_name='c++')
# Course.objects.get_or_create(c_name='php')
# Course.objects.get_or_create(c_name='java')
# Course.objects.get_or_create(c_name='go')
# Course.objects.get_or_create(c_name='r') # 一对多操作
d1 = Department.objects.get(d_id=1)
d2 = Department.objects.get(d_id=2)
d3 = Department.objects.get(d_id=3)
s1 = Student.objects.get(s_id=1)
s2 = Student.objects.get(s_id=2)
s3 = Student.objects.get(s_id=3)
s7 = Student.objects.get(s_id=7)
# add方法
# 将学生s_id2添加到学院d_id2中
# d2.student_set.add(s2)
# d1.student_set.add(s7)
# create方法
# 新建学生test10,加入d_id1中
# d1.student_set.create(s_name='test10')
# 查询
# print(s1.department.d_name)
# print(s1.department.d_id)
# print(d1.student_set.all())
# print(d1.student_set.filter(s_id=1))
# print(d1.student_set.get(s_id=3))
# 删除
# d1.student_set.remove(s3)
# d2.student_set.clear() # 一对一操作
# stu = Stu_detail.objects.get(id=1)
# print(stu.student.s_name)
# print(s1.stu_detail.city) # 多对多操作
c1 = Course.objects.get(c_id=1)
c2 = Course.objects.get(c_id=2)
c3 = Course.objects.get(c_id=3)
c4 = Course.objects.get(c_id=4) s6 = Student.objects.get(s_id=6)
s7 = Student.objects.get(s_id=7)
s8 = Student.objects.get(s_id=8)
s9 = Student.objects.get(s_id=9)
# 添加
# c1.student.add(s6, s7)
# s8.course_set.add(c2, c4)
# s9.course_set.add(c1, c3)
# 查询
# print(s6.course_set.all())
# print(s7.course_set.get(c_id=1))
# print(c2.student.all())
# print(c3.student.get(s_id=9))
# 删除
# s6.course_set.remove(c1)
# c4.student.clear()
# c3.student.remove(s9) # 多表联查
# 查询报名了python的学生的学生信息
# rs = Stu_detail.objects.filter(student__course__c_name='python')
# rs = Stu_detail.objects.filter(student__course__c_id=1)
# 学生名字包含test1的学院信息
# rs = Department.objects.filter(student__s_name__contains='test')
# 软件学院报名了python的学员的详细信息
# rs = Stu_detail.objects.filter(student__department__d_name='软件', student__course__c_name='python')
# print(rs) return HttpResponse('执行成功')

小白学习django第四站-关联数据库的更多相关文章

  1. 小白学习django第六站-http相关

    请求与相应 HttpRequest对象API def home(request): print('path:', request.path) print('mothod:', request.meth ...

  2. 小白学习django第五站-简易案例

    首先在setting.py文件中编写数据库配置内容 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': ' ...

  3. 小白学习django第三站-自定义过滤器及标签

    要使用自定义过滤器和标签,首先要设置好目录结构 现在项目目录下建立common的python包 再将common加入到setting.py中的INSTALLED_APP列表中 在common创建目录t ...

  4. 小白学习django第一站-环境配置

    Django简单来说就是用Python开发的一个免费开源的Web框架 使用Django,使你能够以最小的代价构建和维护高质量的Web应用. 开搞!!! 工具准备: linux(ubuntu) + py ...

  5. Django基础四(model和数据库)

    上一篇博文学习了Django的form和template.到目前为止,我们所涉及的内容都是怎么利用Django在浏览器页面上显示内容.WEB开发除了数据的显示之外,还有数据的存储,本文的内容就是如何在 ...

  6. 小白学习django第二站-模版配置

    上一站说道app创建,接下来我们来配置app的url路由 首先需要到setting.py中添加book这个app, 再到django_test文件里的urls添加路由 include() : 这个函数 ...

  7. 小白学习Spark系列四:RDD踩坑总结(scala+spark2.1 sql常用方法)

    初次尝试用 Spark+scala 完成项目的重构,由于两者之前都没接触过,所以边学边用的过程大多艰难.首先面临的是如何快速上手,然后是代码调优.性能调优.本章主要记录自己在项目中遇到的问题以及解决方 ...

  8. Mysql学习笔记(四)聊聊数据库索引

    小心情(可直接跳到分割线后) 今天心情好些了.一些浓的化不开的坏情绪,也渐渐的在晚上解决掉一个复杂的逻辑问题后,渐渐消散了. 今天中午去吃饭的时候,坤哥漫不经心的说:'我这么多年终于悟出了一个道理,人 ...

  9. sqlserver -- 学习笔记(四)将一个数据库的表复制到另外一个数据库(备忘)

    --复制结构+数据 select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 select * into Stockholder.dbo.SHInfo from dsp ...

随机推荐

  1. jmeter操作登录等简单的使用

    一.登录 1.打开jmeter创建“线程组” 2.创建HTTP默认值 3.添加http默认值后,后边的http请求就可以省略填写部分内容 4.添加“HTTP信息管理头”在内添加名称:“Content- ...

  2. ESPCMS的CSRF添加管理员账号

    ESPCMS的CSRF添加管理员账号 前言 这里开始的思路是先注入进去 然后getshell 但是不关CSRF什么事 换思路 看了一下群消息  大哥发了一个视频  后台名称admin  admin12 ...

  3. JDK动态代理、CGLIB动态代理详解

    Spring的AOP其就是通过动态代理的机制实现的,所以理解动态代理尤其重要. 动态代理比静态代理的好处: 1.一个动态代理类可以实现多个业务接口.静态代理的一个代理类只能对一个业务接口的实现类进行包 ...

  4. webpack搭建多页面系统(一):对webpack 构建工具的理解

    为什么使用webpack构建工具? 1.开发效率方面: 在一般的开发过程中,分发好任务后,每个人完成自己单独的页面,如果有的人开发完成之后,接手别人的任务,就有可能造成开发时候的冲突. 如果利用模块化 ...

  5. js 处理url参数,应用导航分类

    1.先上图 2.代码 html <li><a href="javascript:void(0);" data-cid = "{$v['id']}&quo ...

  6. TensorFlow 学习(2)——正式起步

    学习TensorFlow官方文档中文版 http://wiki.jikexueyuan.com/project/tensorflow-zh/get_started/basic_usage.html 一 ...

  7. 《视觉SLAM十四讲》第2讲

    目录 一 视觉SLAM中的传感器 二 经典视觉SLAM框架 三 SLAM问题的数学表述 注:原创不易,转载请务必注明原作者和出处,感谢支持! 本讲主要内容: (1) 视觉SLAM中的传感器 (2) 经 ...

  8. backspace 产生乱码的问题

    1.要使用回删键(backspace)时,同时按住ctrl键(一般情况下会有用,如果没用使用下面的方法)   2.设定环境变量   在bash下:$ stty erase ^? 或者把 stty er ...

  9. 网络通信框架之okHttpUtils

    okHttpUtils封装库志支持: 一般的get请求 一般的post请求 基于Http的文件上传 文件下载 上传下载的进度回调 加载图片 支持请求回调,直接返回对象.对象集合 支持session的保 ...

  10. [log4j]log4j简单配置

    步骤: 1.导入jar包:log4j-1.2.17.jar 2.编写log4j配置文件:log4j.properties ### set log levels - for more verbose l ...