使用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. git上传项目已经删除文件,但是Jenkins中没有删除

    jenkins 缓存造成的,需要清理工作空间

  2. WebSocket-java实现

    一.所需jar 二.创建websocket.jsp(注意此页面链接,需要链接到自己的服务) <%@ page language="java" import="jav ...

  3. SprintBoot日志

    yml配置 #logging logging.file: "logs/app.log" logging: level: root: debug file: max-size: 10 ...

  4. cp复制命令详解

    linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir ...

  5. 操作系统-Windows:UWP(Universal Windows Platform)

    ylbtech-操作系统-Windows:UWP(Universal Windows Platform) 1.返回顶部 1. UWP即Windows 10中的Universal Windows Pla ...

  6. GitHub:Baidu

    ylbtech-GitHub:Baidu 1.返回顶部 · duedge-recipes DuEdge百度边缘网络计算样例代码 edgeedge-computingduedge    JavaScri ...

  7. java.sql.SQLException: Listener refused the connection with the following error: ORA-12505, TNS:list

    package DisplayAuthors; import  java.sql.*; public class DisplayAuthors  { private static final  Str ...

  8. Python安装远程调试Android需要的扩展脚本

    http://android-scripting.googlecode.com/hg/python/ase/android.py 拷贝到/Python27/Lib/site-packages这个目录下 ...

  9. configmap使用-完整的configmap文档

    转发 https://www.jianshu.com/p/cf3e2218f283 转发 https://www.kubernetes.org.cn/3138.html 注意:configmap不用也 ...

  10. centos 7安装redis5

    环境 centos 7 最简安装 官网指导地址:https://redis.io/download 1.yum 安装wget # yum install -y wget 2.安装gcc yum ins ...