Djiango 连接数据库mysql 的基本数据操作
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 的基本数据操作的更多相关文章
- zabbix数据库mariadb从服务器迁移到云mysql数据库的操作
zabbix数据库mariadb从本机迁移到云mysql数据库的操作 1.将zabbix数据库导出,并导入到云数据库中 由于数据库较大,如果直接使用shell会话中断会导致数据库导出或者导入失败,使用 ...
- mysql 用命令操作
本篇文章来源于http://c.biancheng.net/cpp/html/1441.html mysql:连接数据库 mysql命令用户连接数据库. mysql命令格式: mysql -h主机地址 ...
- C语言对mysql数据库的操作
原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎么使用而进行查阅的! 我们言归正 ...
- python使用MySQLdb实现连接数据库Mysql
python实现连接数据库mysql的步骤: 一.引入MySQLdb 二.获取与数据库的连接 三.执行SQL语句和存储过程 四.关闭数据库连接 1.什么是MySQLdb? MySQLdb是用于pyth ...
- Linux下MySQL的简单操作
Linux下MySQL的简单操作 更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -ur ...
- MySQL基本简单操作01
MySQL基本简单操作 学会了安装Docker,那么就将它利用起来.(/滑稽脸) 之前想学习Mysql(Windows下配置真麻烦),学会了Docker就方便了,直接使用Docker创建一个Mysql ...
- PHP mysql 扩展库 操作mysql数据库步骤
一.mysql 扩展库操作mysql数据库步骤如下: 1.获取连接 2.选择数据库 3.设置操作编码 4.发送指令(ddl数据定义/dml数据操作/dql数据查询/dtl数据事务控制) 5.接收返回的 ...
- go语言入门教程百度网盘 mysql图形化操作与数据导入
mysql图形化操作与数据导入 @author:Davie 版权所有:北京千锋互联科技有限公司 数据库存储技术 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个 ...
- MySQL数据库4Python操作mysql、索引、慢查询日志
目录 一.Python 操作 mysql 1.1python 操作 mysql 1.2查询数据 1.3增加(添加.更新)数据 1.4修改数据 1.5删除数据 1.6SQL注入问题 1.6.1问题的引入 ...
随机推荐
- 有关Git基础操作的学习
Git简介 Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容. Git 易于学习, 占地面积小,具有闪电般的快速性能.它具有诸如Subversion,CVS,P ...
- WPF中Grid容器中VerticalAlignment和HorizonAlignment和Margin的关系。
在WPF中,经常使用Grid容器,来布局我们想要显示的对象. 这就不可避免的要和布局在其中的控件的VerticalAlignment特性,HorizonAlignment特性,以及Magin特性打交道 ...
- Linux(CentOS7)下二进制安装MySQL5.7.26
记录一下自己在 CentOS7 下二进制安装 MySQL5.7.26 的过程,之前使用 Linux(CentOS7)下rpm安装MySQL8.0.16 之后发现 rpm 方式安装不利于维护,也不利于单 ...
- Jupyter Notebook出现kernel error情况
今天重新装了anaconda,在运行时发现真快,可是在运行selenium的代码时候,发现自己按照以前写得帖子得步骤做,同样还是出现了错误,心里不免大吃一惊,难道我的做法是错的?等到发现有个 ker ...
- 201871030129-魏琦 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业链接 我的课程学习目标 (1)掌握Github协作开发程序的操作方法:(2)理解并掌握代码风格规范.代码设计规范.代码复审.结对编程概念: ...
- JAVA并发(7)-并发队列PriorityBlockingQueue的源码分析
本文讲PriorityBlockingQueue(优先阻塞队列) 1. 介绍 一个无界的具有优先级的阻塞队列,使用跟PriorityQueue相同的顺序规则,默认顺序是自然顺序(从小到大).若传入的对 ...
- 1-3. SpringBoot基础,Java配置(全注解配置)取代xml配置
最近突发奇想,整合一下以前一些学习笔记,分享自己这几年爬过的坑,逐步更新文章,谢谢大家的关注和支持. 这节讲一下SpringBoot的学习必须的一些基础,Java配置.其实在Spring2.0时代就已 ...
- 【NX二次开发】获取对象边界包容盒的三个函数UF_MODL_ask_bounding_box
今天看到胡工对bounding_box的分享,我也来测试一番(原帖地址:https://www.ugapi.com/thread-10287.html) 获取对象的边界盒子的三个函数: 1 UF_MO ...
- 如何使用perf进行程序分析
1.安装. sudo apt-get install linux-tools 如果提示没有可安装候选.请输入: sudo apt-get install linux-perf-version 其中ve ...
- 终于放弃了单调的swagger-ui了,选择了这款神器—knife4j
knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案(在非Java项目中也提供了前端UI的增强解决方案),前身是swagger-bootstrap-ui,取名knife ...