08.14自我总结

django-orm框架

一.orm基本配置

1.创建django项目

  • 命令行:cmd先去到django创建目录,然后输入django-admin startproject django项目名称
  • pycharm就直接创建新project选择django

2.settings.py文件配置

1.需要在install_app中配置需要连接的app

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app_mysql.apps.AppMysqlConfig', #这个是我们pycharm创建时候自动帮我们注册的就是app配置
'app_mysql', #如果有新的或者命令行创建的app我们只要这这里面把app名称写上去即可
]

2. 需要在database中进行配置连接mysql的用户名和密码以及数据库

DATABASES = {
'default':{
'ENGINE':'django.db.backends.sqlite3', #sqlite3数据库是个小型的数据库
'NAME':os.path.join(BASE_DIR,'sqlite3') #NAME填写路径即可
}
# 'default': {
# 'ENGINE': 'django.db.backends.mysql',
# 'NAME':'库名',
# 'USER':'mysql账号名称',
# 'PASSWORD':'mysql密码',
# 'HOST':'127.0.0.1',
# }
}

3.__init__的配置

import pymysql
pymysql.install_as_MySQLdb()

4.modelse文件配置

配置表单信息

from django.db import models

# Create your models here.
class sb(models.Model):
### 主键自增id不用写, 默认会加上
name = models.CharField(max_length=30,null=True) class big_sb(models.Model):
name = models.CharField(max_length=30, null=True)
bigsb = models.ForeignKey('sb',id) class sb2(models.Model):
name = models.CharField(max_length=30,null=True)

5.生成表单语句

在命令行进行操作

  • python manage.py makemigrations
  • python manmge.py migrate

二.orm框架的表单的增删改查

必须先在逻辑业务层中载入

from 表单所在的app名称 import models

其中表名均为再modelse中配置的表的名称

1.增

  • 单条数据:

    • 方法一 : models.表名.objects.create(字段1=值1,字段2=值2........)
    • 方法二:dict = {'字段1':值,'字段2':值.........};models.表名.objects.create(**dict)
  • 多条数据:

    info = [
    models.UserInfo(name='root1', age=34, ut_id=1),
    models.UserInfo(name='root2', age=35, ut_id=2),
    models.UserInfo(name='root3', age=36, ut_id=1),
    models.UserInfo(name='root4', age=37, ut_id=3),
    models.UserInfo(name='root5', age=32, ut_id=1),
    ]
    models.UserInfo.objects.bulk_create(info)

2.删

models.表名.objects.filter(满足的条件).delete()

3.改

models.表名.objects.filter(满足的条件).update(name='lll', age=23)

4.查

models.UserType.objects.all().values()

表A的ud关联表b

有子健关系的查询正向查询通过A表中的ud查到表b的id

  • 方法一:models.A.objects.all().values('ud__id')

  • 方法二

    res = models.A.objects.all()
    for a in res:
    print(a.ud.id)

有子健关系的查询返向查询通过b表中的查到a表ID

  • 方法一:models.B.objects.all().values('A__id')

  • 方法二:

    res = models.B.objects.all()
    for b in res:
    print(b.a_set.id) #### 表名小写_set

三.orm进阶查询

1.字段名过滤

filter满足条件的

exclude不满足条件

用法:

#id等于3的
models.表名.objects.filter(id=3).values() #id不等于3的
models.表名.objects.exclude(id=3).values()

关于filter与exclude里面填写的参数

  • 等于:字段名=值

  • 大于:字段名__gt=值

  • 大于等于:字段名__gte=值

  • 小于:字段名__lt=值

  • 小于等于:字段名__lte=值

2.成员in not in

res = models.表名.objects.filter(字段名__in=[2,4,5]) # where id in (2,4,5)
res = models.表名.objects.exclude(字段名__in=[1,2]) # where id not in (1,2)

3.区间between...and

# where id between 4 and 8   [4,8]
res = models.表名.objects.filter(字段名__range=[4,8])

4.模糊查询like

# where name like 'a%'
res = models.表名.objects.filter(字段名__startswith="a")
res = models.表名.objects.filter(字段名__istartswith="a") #忽略大小写 # where name like '%a'
res = models.表名.objects.filter(字段名__endswith="a")
res = models.表名.objects.filter(字段名__iendswith="a") #忽略大小写 # where name like '%a%'
res = models.表名.objects.filter(字段名__contains="a")
res = models.表名.objects.filter(字段名__icontains="a") #忽略大小写

只要是i开头的基本上都是忽略大小写

5.数据条数count

# select count(*) from userinfo where id>3;
# select count(id) from userinfo where id>3;
#用sql语句查询数据条数尽量不要查count(*)查主键会快很多
res = models.UserInfo.objects.filter(id__gt=3).count()

6.排序order by

#升序
res = models.表名.objects.order_by('字段名称') #降序
res = models.表名.objects.order_by('-字段名称') #多个条件进行排序
res = models.表名.objects.order_by('字段1','字段2') #当字段1相同是会更具字段2进行排序

7.分组group by已经having

# select id, sum(age) as s, username from userinfo group by username
from django.db.models import Count, Min, Max, Sum
res = models.UserInfo.objects.values("name").annotate(s=Sum('age')) # select id, sum(age) as s, username from userinfo group by username having s > 50;
res = models.UserInfo.objects.values("name").annotate(s=Sum('age')).filter(s__gt=50)

8.分页limit

# limit 1, 3 分页
res = models.UserInfo.objects.all()[1:4]
#因为获取对象是列表所有切片即可

9.last/first

第一条:res = models.表名.objects.first()

最后一条:res = models.表名.objects.last()

10.only|defer

只查某个字段:only('字段名称')

除某个字段以外的所有字段:defer('字段名')

注意:主键id不管怎么样都会查

12.and|or

只有and

#id等于3and名字等于a
models.表名.objects.filter(id=3,and name='a').values()

只有or

# Q
from django.db.models import Q
res = models.UserInfo.objects.filter(Q(id__gt=3) | Q(name='zekai')) #or用|链接

有and和or

# Q
from django.db.models import Q
res = models.UserInfo.objects.filter( Q(Q(id__gt=3) | Q(name='zekai')) & Q(age=23) ) and用&链接

13.F

from django.db.models import F
models.UserInfo.objects.update(name=F('name')+1) #字段名称都加1

14.原生sql 类似pymysql

from django.db import connection, connections
cursor = connection.cursor() # cursor = connections['default'].cursor()
cursor.execute("""SELECT * from auth_user where id = %s""", [1])
row = cursor.fetchone()
print(row)

15.去重distinct

models.UserInfo.objects.values("name", 'age').distinct() #前面values有多少个就对多少个值进行去除

四.补充一个小点

print(res.query) 查看上述代码生成的sql语句

django-orm框架表单的增删改查的更多相关文章

  1. vue.js带复选框表单的增删改查

    近段时间由于公司项目要求,前端开始使用VUE框架进行开发,最近刚开始学习,做了一个表单的增删改查,和大家分享一下. 页面模型代码设计如下 <template> <div id=&qu ...

  2. AppBox实战: 如何实现一对多表单的增删改查

      本篇通过完整示例介绍如何实现一对多关系表单的相应服务及视图. 一.准备数据结构   示例所采用的数据结构为"物资需求"一对多"物资清单",通过IDE的实体设 ...

  3. Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查

    本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...

  4. DjangoMTV模型之model层——ORM操作数据库(基本增删改查)

    Django的数据库相关操作 对象关系映射(英语:(Object Relational Mapping,简称ORM),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效果上说 ...

  5. golang学习之beego框架配合easyui实现增删改查及图片上传

    golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...

  6. Online Coding开发模式 (通过在线配置实现一个表模型的增删改查功能,无需写任何代码)

    JEECG 智能开发平台. 开发模式由代码生成器转变为Online Coding模式                      (通过在线配置实现一个表模型的增删改查功能,无需一行代码,支持用户自定义 ...

  7. Maven+SSM框架,实现单表简单的增删改查

    目录 1.创建web Maven项目 2.创建java源码文件和resources资源文件 3.创建数据库配置文件:jdbc.properties 4.项目总体目录: 5.添加spring配置文件:a ...

  8. SQLAlchemy表操作和增删改查

    一.SQLAlchemy介绍 SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数 ...

  9. SSM框架之MyBatis框架实现简单的增删改查

    MyBatis框架介绍 MyBatis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系是一种半自动化的ORM实现,其封装性要低于Hibernate,性能优越,并且小巧,简单易学,应用也 ...

随机推荐

  1. 记一次oracle新建用户及分配指定表权限的操作记录

    1.登录 2.创建用户create user new用户名 identified by new用户名创建new用户名用户,密码设置为new用户名. 3.授权new用户名用户的连接.资源权限.grant ...

  2. Java抽象类构造方法

    java中抽象类的子类的构造方法会隐含父类的无参构造方法. package com.zempty.abstractclass; public class AbstractDemo01 { public ...

  3. 简单的Socket通信(简单的在线聊天)---winform

    注:本博客适合刚开始学习winform程序的初学者,大牛请绕道(跪求大牛指导文中不足) .....10w字废话自动省略,直接开始正题. 首先从最基本的建立winform开始(本项目用的Vs2017) ...

  4. PHP开发 高可用 高安全App后端(免费)

    PHP开发高可用高安全App后端 第1章 本章先讲解课程所含技术点,并演示相关的项目,让小伙伴对课程有个初步的认知,然后再带领小伙伴进行功能的分析,表的ER总关系图 第2章 本章主要讲解课程的一些准备 ...

  5. Nginx 日志文件 access_log详解及日志分割

    Module ngx_http_log_module nginx 日志相关指令主要有两条, 一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.格 ...

  6. Day 9 用户管理

    1.什么是用户? 能正常登陆系统的都算用户 windows系统和linux系统的用户有什么区别? 本质上没有区别, linux支持多个用户同一时刻登陆系统, 互相之间不影 响 而windows只允许同 ...

  7. Day 7 vim 文件编辑与vim的使用

    1.什么是vim? vi 和 vim 是Linux下的一个文本编辑工具,(可以理解为windows的记事本或word文档) 2.为什么要使用vim? 因为linux 系统一切皆为文件,而我们工作最多的 ...

  8. Windows Docker 部署 Spring Boot 项目

    目录 Docker Configuration Config IDEA Plugin Create Spring Boot Project Containerize It Use Dockerfile ...

  9. eclipse导入别的项目后发现jdk版本不一样,该如何解决呢?

    当我们导入其他人的项目的时候,发现导入的项目的jdk版本与我们使用电脑上的版本不同,该如何解决呢? 选中项目右键 --> Properties --> Build Path --> ...

  10. Airtest之web自动化(一)

    Airtest之web自动化(一) [此文档有许多涉及到gif动图的地方,请全屏观看]   了解Airtest: 简介: Airtest是由网易团队开发的一款自动化框架,前期运用与游戏测试(通过截图识 ...