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问题的引入 ...
随机推荐
- linux下 find命令使用
按名称查找 find . -name filename [root@vps repo]# ls README.md vps.sh[root@vps repo]# find . -iname vps ...
- Archlinux zsh终端美化 powerlevel10k配置
环境 Arch Linux + KDE Plasma 安装zsh yay -S zsh 更改默认终端 chsh -s /bin/zsh 安装oh-my-zsh-git archlinuxcn源有打好的 ...
- 达梦数据库产品支持技术学习分享_Week2
本周主要从以下几个方面进行本人对达梦数据库学习的分享,学习进度和学习情况因人而异,仅供参考. 一.文本命令行工具使用的方法(Disql和dmfldr) 二.数据库备份 三.定时作业功能 四.系统表和动 ...
- Go语言设计模式之函数式选项模式
Go语言设计模式之函数式选项模式 本文主要介绍了Go语言中函数式选项模式及该设计模式在实际编程中的应用. 为什么需要函数式选项模式? 最近看go-micro/options.go源码的时候,发现了一段 ...
- MindSpore整体架构介绍
MindSpore整体架构介绍 MindSpore框架架构总体分为MindSpore前端表示层.MindSpore计算图引擎和MindSpore后端运行时三层. MindSpore前端表示层(Mind ...
- 如何使用TensorCores优化卷积
如何使用TensorCores优化卷积 本文将演示如何在TVM中使用TensorCores编写高性能的卷积计划.假设卷积的输入有大量数据.首先介绍如何在GPU上优化卷积. TensorCore简介 每 ...
- ARM Cortex-M嵌入式C基础编程(上)
ARM Cortex-M嵌入式C基础编程(上) ARM Cortex-M Embedded C Fundamentals/Tutorial -Aviral Mittal 此技术是关于从编写简单的嵌入式 ...
- 【NX二次开发】Block UI 选择节点
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- MySQL的可重复读级别能解决幻读问题吗?
之前在深入了解数据库理论的时候,了解到事务的不同隔离级别可能存在的问题.为了更好的理解所以在MySQL数据库中测试复现这些问题.关于脏读和不可重复读在相应的隔离级别下都很容易的复现了. 但是对于幻读, ...
- UNREFERENCED_PARAMETER的用处
UNREFERENCED_PARAMETER的用处 作用:告诉编译器,已经使用了该变量,不必检测警告! 在VC编译器下,如果您用最高级别进行编译,编译器就会很苛刻地指出您的非常细小的警告.当你生命了一 ...