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. 原创 | 手摸手带您学会 Elasticsearch 单机、集群、插件安装(图文教程)

    欢迎关注笔者的公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site/ ...

  2. 调用webservice获取电话号码归属地信息

    首先什么是webservice ? 从广义上面讲,任何一个服务器所提供的"数据","内容","方法"等等都可以理解为webservice. ...

  3. rpm简单使用

    rpm描述:利用源码包编译成rpm时,会去指定安装好这个包的位置本质:解压,然后拷贝到相关的目录,然后执行脚本 vstpd-3.0.2-9.el7.x86_64.rpm 包名 版本 release 架 ...

  4. C++ std::thread概念介绍

    C++ 11新标准中,正式的为该语言引入了多线程概念.新标准提供了一个线程库thread,通过创建一个thread对象来管理C++程序中的多线程. 本文简单聊一下C++多线程相关的一些概念及threa ...

  5. Day 2 Bash shell 认识

    1.拍摄虚拟机的快照 2. 什么是Bash shell? 命令解释器,将用户输入的命令,翻译给内核程序,将用户输入的指令翻译给内核 程序,内核处理完成之后将结果返回给bash. 如何打开一个bash窗 ...

  6. windows导出文件名列表

    新建txt文件,粘贴以下命令: DIR *.*  /B >LIST.TXT 将txt文件的后缀改为.bat 执行bat文件即可

  7. Android MediaPlayer 音频倍速播放,调整播放速度

    本文链接: Android MediaPlayer 倍速播放,调整播放速度 现在市面上的很多音视频App都有倍速播放的功能,例如把播放速度调整为0.5.1.5.2倍等等. 从Android API 2 ...

  8. Linux Centos7部署环境安装-CentOS

    Linux Centos7部署环境安装-CentOS Centos7部署环境安装及Linux常用命令 centos系统下各文件夹的作用 centos7修改系统默认语言 centos7安装rz/sz命令 ...

  9. 阿里云服务器CentOS6.9 tomcat配置域名访问

    之前一直是ip访问项目,今天申请到一个测试域名,想要用设置用域名访问项目. 1.进入阿里云服务器中,修改tomcat中server.xml文件 cd /usr/local/apache-tomcat/ ...

  10. Flask基础(07)-->正则自定义转换器

    正则自定义转换器 为什么要自定义正则转换器? 因为默认转换器太过于笨重,往往不能满足我们实际业务的需求,这时候我们就需要自定义正则转换器了. 那么我们怎么自定义正则转换器呢? from flask i ...