1、单表操作

(1) .增加操作

 1 # 增加操作
2 def add_person(request):
3 # 1.使用save() 方法
4 # person_obj = models.Person()
5 # person_obj.name = 'wanwu'
6 # person_obj.age = 18
7 # person_obj.gender = False
8 # person_obj.address = 'shanghai'
9 # person_obj.save()
10 # 2.使用create() 方法
11 # person_obj = models.Person.objects.create(name='lsi', age=20, gender=True, address='shenzhen')
12 # print(person_obj.id)
13
14 models.Goods.objects.create(name='苹果', xl=1000, kc=2000)
15 models.Goods.objects.create(name='香蕉', xl=1000, kc=500)
16 models.Goods.objects.create(name='梨', xl=1000, kc=700)

(2) .查询操作

 1 def find_person(request):
2 # 1.get() 返回值是一个具体对象。如果不存在则报错!!!,返回多了也报错
3 # person_obj = models.Person.objects.get(id=2)
4 # print(person_obj)
5
6 # 2.first() 和last()方法 返回值是一个具体的对象。
7 # ret = models.Person.objects.last()
8 # print(ret)
9 # 3.all() 返回一个QuerySet对象,类似于列表。
10 # person_obj_list = models.Person.objects.all()
11 # print(person_obj_list)
12 # # <QuerySet [<Person: Person object (1)>, <Person: Person object (2)>, <Person: Person object (3)>]>
13 # for person_obj in person_obj_list:
14 # print(person_obj.name)
15 # 4.filter()
16 # person_obj_list = models.Person.objects.filter(age=18)
17 # print(person_obj_list) # <QuerySet [<Person: Person object (1)>, <Person: Person object (3)>]>
18 # 多个条件之间使用并且的关系。
19 # ret = models.Person.objects.filter(age=18, name='zss')
20 # print(ret)
21 # 5.排序order_by() -id 表示降序。
22 # ret = models.Person.objects.all().order_by('-id')
23 # print(ret)
24
25 # 6.双下划线查询
26 # ret = models.Person.objects.filter(age__gte=18)
27 # print(ret)
28 # ret = models.Person.objects.filter(name__startswith='z')
29 # print(ret)
30
31 # 7.聚合函数aggregate()
32 from django.db.models import Count, Max, Min, Sum, Avg, F, Q
33 # 求年龄的平均值
34 # ret = models.Person.objects.all().aggregate(Avg('age'))
35 # print(ret) # {'age__avg': 18.6667}
36
37 # 8.分组 annotate()
38 # 按性别来分组,求人数
39 # ret = models.Person.objects.all().values('gender').annotate(Count('gender'))
40 # print(ret)
41 # 9. F和Q查询
42 # F 查询:同一个模型类中,不同属性进行比较。
43 # 查询销量(xl)大于库存(kc)的商品
44 # ret = models.Goods.objects.filter(xl__gt=F('kc'))
45 # print(ret)
46 # Q查询:可以实现复杂的查询 not (~)、and (&)、or (|) 关系的使用。
47 # 查询库存大于1000 、或者销量等1000的商品
48 # ret = models.Goods.objects.filter(Q(xl=1000) | Q(kc__gt=1000))
49 # print(ret)
50 # ret = models.Goods.objects.all()[2] # 索引
51 # print(ret)
52 # ret = models.Goods.objects.all()[1:] # 切片
53 # print(ret)
54 return HttpResponse('find person...')

(3) .修改操作

 1 def update_person(request):
2 # 1.使用save()
3 # person_obj = models.Person.objects.get(id=2)
4 # person_obj.age = 23
5 # person_obj.save()
6 # 2. 使用update()方法,查询出多个来统一修改
7 ret = models.Person.objects.filter(name='lsi').update(age=22)
8 print(ret)
9
10 return HttpResponse('update person...')

(4) .删除操作

# 删除操作
def delete_person(request):
person_obj = models.Person.objects.get(id=1)
person_obj.delete() return HttpResponse('delete person...')

2、一对一操作

(1) .模型类

 1 class User(models.Model):
2 id = models.AutoField(primary_key=True)
3 name = models.CharField(max_length=32)
4 age = models.IntegerField(default=10)
5
6
7 class IdCard(models.Model):
8 id = models.AutoField(primary_key=True)
9 address = models.TextField(default='beijing')
10 cardnum = models.CharField(max_length=32) # 身份证号
11 # 一对一关联
12 # to=User :关联的表。on_delete:删除策略。
13 # models.CASCADE:级联删除,删除一的一方的时候,另外一方也删除。
14 # related_name='card':表示反向查询的时候使用属性。如果不写,反向查询的时候默认值为类名小写idcard
15 user = models.OneToOneField(to=User, on_delete=models.CASCADE, related_name='card') # 在数据库中会自动添加_id
16
17
18
19
20
21
22
23 def one_add(request):
24 # user_obj = models.User()
25 # user_obj.name = 'zs'
26 # user_obj.age = 18
27 # user_obj.save()
28 # idcard_obj = models.IdCard()
29 # idcard_obj.cardnum = '131126333'
30 # idcard_obj.address = 'beijing'
31 # idcard_obj.user = user_obj # 设置关系--> 赋值对象
32 # idcard_obj.save()
33
34 user_obj = models.User()
35 user_obj.name = 'lsi'
36 user_obj.age = 20
37 user_obj.save()
38
39 idcard_obj = models.IdCard()
40 idcard_obj.cardnum = '131126444'
41 idcard_obj.address = 'shangai'
42 idcard_obj.user_id = user_obj.id # 设置关系--> 赋值id
43 idcard_obj.save()
44
45 return HttpResponse('one add...')
46
47
48 # 查询
49
50 def one_find(request):
51 # 正向查询
52 # 1.查询id 为1 的身份证对应的人。
53 # card_obj = models.IdCard.objects.get(id=1)
54 # user_obj = card_obj.user # 通过关系属性获取对象
55 # print(user_obj, user_obj.name) # User object (1)
56
57 # 反向查询
58 # 2.查询zs 对应的身份证对象
59 user_obj = models.User.objects.filter(name='zs').first()
60 # card_obj = user_obj.idcard # 类名小写,直接获取到对象。
61 card_obj = user_obj.card # 使用的related_name属性的值。
62 print(card_obj)
63 return HttpResponse('one find...')
64
65
66 def one_delete(request):
67 # 删除zs
68 user_obj = models.User.objects.get(id=1)
69 user_obj.delete() # 级联删除身份证
70 return HttpResponse('one delete...')

3、一对多操作

 1 # 部门表
2 class Dept(models.Model):
3 id = models.AutoField(primary_key=True)
4 name = models.CharField(max_length=32)
5
6
7 class Employee(models.Model):
8 id = models.AutoField(primary_key=True)
9 name = models.CharField(max_length=32)
10 # 设置外键
11 dpet = models.ForeignKey(to=Dept, on_delete=models.CASCADE, related_name='emps')
12
13
14
15
16
17 # 一对多操作
18
19 def onetomany_add(request):
20 dept_obj = models.Dept.objects.create(name='市场部')
21 emp_obj = models.Employee()
22 emp_obj.name = 'lsi'
23 emp_obj.dpet = dept_obj # 赋值对象即可
24 emp_obj.save()
25
26 emp_obj1 = models.Employee()
27 emp_obj1.name = 'ww'
28 emp_obj1.dpet = dept_obj
29 emp_obj1.save()
30
31 emp_obj2 = models.Employee()
32 emp_obj2.name = 'zl'
33 emp_obj2.dpet = dept_obj
34 emp_obj2.save()
35
36 return HttpResponse('onetomany_add...')
37
38
39 # 查询
40
41 def onetomany_find(request):
42 # 正向查询
43 # 1.查询lsi 对应的部门
44 # emp_obj = models.Employee.objects.filter(name='lsi').first()
45 # print(emp_obj.dpet) # 获取部门对象
46
47 # 反向查询
48 # 2.查询市场部对应的所有员工
49 dept_obj = models.Dept.objects.get(name='市场部')
50 # ret = dept_obj.employee_set.all() # 使用类名小写_set.方法()
51 ret = dept_obj.emps.all() # 设置查询名称
52 print(ret)
53
54 return HttpResponse('onetomany_find...')
55
56
57 # 删除
58 def onetomany_delete(request):
59 # 1.删除lsi
60 # emp_obj = models.Employee.objects.filter(name='lsi').first()
61 # emp_obj.delete()
62
63 # 2.删除市场部,会级联删除对应的员工。
64 dept_obj = models.Dept.objects.get(name='市场部')
65 dept_obj.delete()
66
67 return HttpResponse('onetomany_delete...')

4、多对多操作

 1 class Teacher(models.Model):
2 id = models.AutoField(primary_key=True)
3 name = models.CharField(max_length=32)
4 salary = models.IntegerField(default=1000)
5
6
7 class Student(models.Model):
8 id = models.AutoField(primary_key=True)
9 name = models.CharField(max_length=32)
10 age = models.IntegerField(default=20)
11 # 多对多关系
12 teachers = models.ManyToManyField(to=Teacher)
13
14
15
16
17
18 def many_add(request):
19 std_obj1 = models.Student()
20 std_obj1.name = 'zs'
21 std_obj1.age = 10
22 std_obj1.save()
23 std_obj2 = models.Student()
24 std_obj2.name = 'sli'
25 std_obj2.save()
26
27 tea_obj = models.Teacher()
28 tea_obj.name = 'laowang'
29 tea_obj.save()
30
31 tea_obj1 = models.Teacher()
32 tea_obj1.name = 'laoli'
33 tea_obj1.save()
34 # 设置关系
35 std_obj1.teachers.add(tea_obj, tea_obj1)
36 std_obj2.teachers.add(tea_obj, tea_obj1)
37
38 return HttpResponse('many to many add...')
39
40
41 def many_find(request):
42 # 1.zs 被哪些老师教过
43 # std_obj = models.Student.objects.get(name='zs')
44 # ret = std_obj.teachers.all()
45 # print(ret)
46
47 # 2.laowang 教过哪些学生
48 tea_obj = models.Teacher.objects.get(name='laowang')
49 ret = tea_obj.student_set.all() # 类名小写_set.方法名称()
50 print(ret)
51 return HttpResponse('many to many find...')

Djiango 连接数据库mysql 的基本数据操作的更多相关文章

  1. zabbix数据库mariadb从服务器迁移到云mysql数据库的操作

    zabbix数据库mariadb从本机迁移到云mysql数据库的操作 1.将zabbix数据库导出,并导入到云数据库中 由于数据库较大,如果直接使用shell会话中断会导致数据库导出或者导入失败,使用 ...

  2. mysql 用命令操作

    本篇文章来源于http://c.biancheng.net/cpp/html/1441.html mysql:连接数据库 mysql命令用户连接数据库. mysql命令格式: mysql -h主机地址 ...

  3. C语言对mysql数据库的操作

    原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎么使用而进行查阅的! 我们言归正 ...

  4. python使用MySQLdb实现连接数据库Mysql

    python实现连接数据库mysql的步骤: 一.引入MySQLdb 二.获取与数据库的连接 三.执行SQL语句和存储过程 四.关闭数据库连接 1.什么是MySQLdb? MySQLdb是用于pyth ...

  5. Linux下MySQL的简单操作

    Linux下MySQL的简单操作 更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -ur ...

  6. MySQL基本简单操作01

    MySQL基本简单操作 学会了安装Docker,那么就将它利用起来.(/滑稽脸) 之前想学习Mysql(Windows下配置真麻烦),学会了Docker就方便了,直接使用Docker创建一个Mysql ...

  7. PHP mysql 扩展库 操作mysql数据库步骤

    一.mysql 扩展库操作mysql数据库步骤如下: 1.获取连接 2.选择数据库 3.设置操作编码 4.发送指令(ddl数据定义/dml数据操作/dql数据查询/dtl数据事务控制) 5.接收返回的 ...

  8. go语言入门教程百度网盘 mysql图形化操作与数据导入

    mysql图形化操作与数据导入 @author:Davie 版权所有:北京千锋互联科技有限公司 数据库存储技术 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个 ...

  9. MySQL数据库4Python操作mysql、索引、慢查询日志

    目录 一.Python 操作 mysql 1.1python 操作 mysql 1.2查询数据 1.3增加(添加.更新)数据 1.4修改数据 1.5删除数据 1.6SQL注入问题 1.6.1问题的引入 ...

随机推荐

  1. kotlin中的嵌套类与内部类

    Java中的内部类和静态内部类在Java中内部类简言之就是在一个类的内部定义的另一个类.当然在如果这个内部类被static修饰符修饰,那就是一个静态内部类.关于内部类 和静态内部类除了修饰符的区别之外 ...

  2. Zabbix企业分布式监控工具

    前言:在工作中常常需要对服务器进行监控,但是要选择一款合适监控软件可不容易,今天介绍下zabbix这款监控软件 一.Zabbix介绍1.Zabbix是一个企业级的.开源的.分布式的监控套件2.Zabb ...

  3. 浅谈,seata在使用feign-url通过域名调用时分布式事务不生效的问题及解决

    浅谈,seata在使用feign-url通过域名调用时分布式事务不生效的问题及解决 ​ 在前几个月时,我们项目出现了分布式事务的问题,那么什么是分布式事务问题呢,简单的说,我们有俩服务A和B,它们对应 ...

  4. 自动调度GPU的卷积层

    自动调度GPU的卷积层 这是有关如何对GPU使用自动调度程序的文档. 与依靠手动模板定义搜索空间的基于模板的autotvm不同,自动调度程序不需要任何模板.用户只需要编写计算声明,而无需任何调度命令或 ...

  5. Django框架之路由层汇总

    一 Django中路由的作用 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来 ...

  6. 用java实现图书管理系统。

    图书管理系统. 一.项目设计到的知识 1.MVC设计模式思想(分包) >项目分包 >MVC简单介绍 2.GUI(图形化界面) 3.JDBC连接MySql数据库 4.I/O流 5.面向对象思 ...

  7. STS或eclipse中导入新项目出现红色感叹号红色叉叉的问题

    maven项目 原因: jar包缺失 没有正确配置Maven仓库 解决: Window->Preferences->Maven->Installations->Add 添加你的 ...

  8. 一文讲全了Python 类和对象内容

    摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan  . Pytho ...

  9. Java面试指北!13个认证授权常见面试题/知识点总结!| JavaGuide

    大家好,我是 Guide哥!端午已过,又要开始工作学习啦! 我发现有很多小伙伴对认证授权方面的知识不是特别了解,搞不清 Session 认证.JWT 以及 Cookie 这些概念. 所以,根据我根据日 ...

  10. 08:'my_tag' is not a registered tag library. Must be one of

    确保每次修改模板标签时都重新启动 Django 开发服务器(或确保它自己重新启动).如果服务器没有重新启动,Django 将不会注册标签. 从 django 1.9 开始,您可以在如下设置中加载这些新 ...