使用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. 使用powershell管理域用户

    在域内环境中,常常需要使用命令行管理域用户,此时可以使用Active Directory中的命令行工具Dsquery.exe,或CSVE,以及Ldifde等,其实,使用Windows Powershe ...

  2. Inter IPP 处理图像数据的方法

    Inter IPP没有读取图片和保存图片的函数,需要结合opencv完成这个功能. opencv读到图片以后逐个像素点赋值给IPP显然是不可取的,方法如下: int main(int argc, ch ...

  3. CLOB、BLOB , CLOB与BLOB的区别

    CLOB 定义 数据库中的一种保存文件所使用的类型. Character Large Object SQL 类型 CLOB 在 JavaTM 编程语言中的映射关系.SQL CLOB 是内置类型,它将字 ...

  4. Git客户端TortoiseGit下载、安装及汉化

    本篇经验将和大家介绍Git客户端TortoiseGit下载.安装及汉化的方法,希望对大家的工作和学习有所帮助! TortoiseGit下载和安装   1 TortoiseGit是Windows下最好用 ...

  5. koa 项目实战(二)连接 mongodb 数据库

    1.配置文件 根目录/config/keys.js module.exports = { mongoURI: 'mongodb://127.0.0.1:27017/mongodb' } 2.启动文件 ...

  6. 原来项目更换svn地址

    近期公司由于旧地址装修,临时更换办公地址:同时相应的网络地址也更换了.我们开发项目的svn地址根目录也得改变.所以怎么解决呢? 1.找到项目根文件夹: 右键:

  7. vs install 安装时自动添加注册表

    思路:使用自定义 解决方案添加类库项目 添加安装程序类 随后右键查看代码 在构造函数添加事件 同时完成这个事件,在此事件中根据需要添加我们需要的内容,此处为添加注册表,并根据安装目录添加url pro ...

  8. iOS 应用"无法安装应用程序 因为证书无效"的解决方案

    原因是由于iOS7.1要安装企业应用,url必须是https的,不能是http,这就要求我们的服务器要支持https.因此,只要将原链接: itms-services://?action=downlo ...

  9. ControlTemplate in WPF —— Slider

    <!--Slider 样式--> <Style x:Key="StyleForRepeatButton" TargetType="{x:Type Rep ...

  10. C++输入输出流加速器,关闭同步流,ios::sync_with_stdio(false)和 cin.tie(0)

    leetcode练习时,总会发现运行时间短的代码都会有类似: static int x=[](){ std::ios::sync_with_stdio(false); cin.tie(NULL); ; ...