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. 有关Git基础操作的学习

    Git简介 Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容. Git 易于学习, 占地面积小,具有闪电般的快速性能.它具有诸如Subversion,CVS,P ...

  2. WPF中Grid容器中VerticalAlignment和HorizonAlignment和Margin的关系。

    在WPF中,经常使用Grid容器,来布局我们想要显示的对象. 这就不可避免的要和布局在其中的控件的VerticalAlignment特性,HorizonAlignment特性,以及Magin特性打交道 ...

  3. Linux(CentOS7)下二进制安装MySQL5.7.26

    记录一下自己在 CentOS7 下二进制安装 MySQL5.7.26 的过程,之前使用 Linux(CentOS7)下rpm安装MySQL8.0.16 之后发现 rpm 方式安装不利于维护,也不利于单 ...

  4. Jupyter Notebook出现kernel error情况

    今天重新装了anaconda,在运行时发现真快,可是在运行selenium的代码时候,发现自己按照以前写得帖子得步骤做,同样还是出现了错误,心里不免大吃一惊,难道我的做法是错的?等到发现有个  ker ...

  5. 201871030129-魏琦 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业链接 我的课程学习目标 (1)掌握Github协作开发程序的操作方法:(2)理解并掌握代码风格规范.代码设计规范.代码复审.结对编程概念: ...

  6. JAVA并发(7)-并发队列PriorityBlockingQueue的源码分析

    本文讲PriorityBlockingQueue(优先阻塞队列) 1. 介绍 一个无界的具有优先级的阻塞队列,使用跟PriorityQueue相同的顺序规则,默认顺序是自然顺序(从小到大).若传入的对 ...

  7. 1-3. SpringBoot基础,Java配置(全注解配置)取代xml配置

    最近突发奇想,整合一下以前一些学习笔记,分享自己这几年爬过的坑,逐步更新文章,谢谢大家的关注和支持. 这节讲一下SpringBoot的学习必须的一些基础,Java配置.其实在Spring2.0时代就已 ...

  8. 【NX二次开发】获取对象边界包容盒的三个函数UF_MODL_ask_bounding_box

    今天看到胡工对bounding_box的分享,我也来测试一番(原帖地址:https://www.ugapi.com/thread-10287.html) 获取对象的边界盒子的三个函数: 1 UF_MO ...

  9. 如何使用perf进行程序分析

    1.安装. sudo apt-get install linux-tools 如果提示没有可安装候选.请输入: sudo apt-get install linux-perf-version 其中ve ...

  10. 终于放弃了单调的swagger-ui了,选择了这款神器—knife4j

    knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案(在非Java项目中也提供了前端UI的增强解决方案),前身是swagger-bootstrap-ui,取名knife ...