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. Hadoop MapReduce 一文详解MapReduce及工作机制

    @ 目录 前言-MR概述 1.Hadoop MapReduce设计思想及优缺点 设计思想 优点: 缺点: 2. Hadoop MapReduce核心思想 3.MapReduce工作机制 剖析MapRe ...

  2. 本地软件仓库配置及NFS安装

    [root@localhost ~]# mount /dev/cdrom /mnt mount: /dev/sr0 is write-protected, mounting read-only [ro ...

  3. 004:ZYNQ_AXI总线学习笔记(1)

    1.    WHAT IS AXI? AXI是一种高级可扩展接口,是ARM AMBA的一部分. 2.    WHAT IS AMBA? AMBA是高级微控制器总线架构,开放的片内互联总线标准. 3.A ...

  4. zookeeper之二:zookeeper3.7.0安装过程实操

    前面分享了zookeeper的基本知识,下面分享有关zookeeper安装的知识. 1.下载 zookeeper的官网是:https://zookeeper.apache.org/ 在官网上找到下载链 ...

  5. 七、Numpy高效数据处理

    Numpy的主要作用是进行矩阵运算 在使用时首先要导入包 import numpy as np np.version.version 用来查看版本信息 # 构建一维数组 n1=np.array([1, ...

  6. 相机自动对焦AF原理

    相机自动对焦AF原理 AF性能是判断相机好坏的重要指标,主要从准确度和速度两个方面来进行考察,本文将介绍自动对焦的几种方式. 一.凸透镜成像原理 二.三种对焦方法 有公式在手,只要给相机安个测距仪就好 ...

  7. Spring如何使用三级缓存解决循环依赖

    Spring如何使用三级缓存解决循环依赖 首先来了解一下什么是循环依赖 @Component public class A { @Autowired B b; } @Component public ...

  8. centos 7 能ping通但是telnet 22 不通解决方法

    试过关闭Linux防火墙,打开sshd服务,修改ens33为enth0.发现不好使. 经过不断的努力我发现,windows系统里面的VMware Network Adapter VMnet8设置的ip ...

  9. 【题解】codeforces 8c Looking for Order 状压dp

    题目描述 Lena喜欢秩序井然的生活.一天,她要去上大学了.突然,她发现整个房间乱糟糟的--她的手提包里的物品都散落在了地上.她想把所有的物品都放回她的手提包.但是,这里有一点问题:她一次最多只能拿两 ...

  10. Pytest学习笔记5-conftest.py的用法

    前言 在之前介绍fixture的文章中,我们使用到了conftest.py文件,那么conftest.py文件到底该如何使用呢,下面我们就来详细了解一下conftest.py文件的特点和使用方法吧 什 ...