zoukankan      html  css  js  c++  java
  • Python自动化之django的ORM

    django ORM操作

    1.什么是ORM?

    ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。

    select * from tb where id > 1
    # 对应关系
    models.tb.objects.filter(id__gt=1)
    models.tb.objects.filter(id=1)
    models.tb.objects.filter(id__lt=1)
    
    创建类
    
    a. 先写类
    	
    	from django.db import models
    
    	# app01_userinfo
    	class UserInfo(models.Model):
    		# id列,自增,主键
    		# 用户名列,字符串类型,指定长度
    		username = models.CharField(max_length=32)
    		password = models.CharField(max_length=64)
    

    配置连接MySQL

    DATABASES = {
        'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'dbname',
        'USER': 'root',
        'PASSWORD': 'xxx',
        'HOST': '',
        'PORT': '',
        }
    }
    
    # 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替
      
    # 如下设置放置的与project同名的配置的 __init__.py文件中
      
    import pymysql
    pymysql.install_as_MySQLdb() 
    

    注册APP

    a. 注册APP
    
    	INSTALLED_APPS = [
    		'django.contrib.admin',
    		'django.contrib.auth',
    		'django.contrib.contenttypes',
    		'django.contrib.sessions',
    		'django.contrib.messages',
    		'django.contrib.staticfiles',
    		'app01',
    	]
    b. 执行命令
    	python manage.py  makemigrations //会生成记录数据库的改动的文件
    	python manage.py  migrate //把改动应用到数据库
    

    增加数据

    models.Tb1.objects.create(c1='xx', c2='oo')  增加一条数据,可以接受字典类型数据 **kwargs
    
    obj = models.Tb1(c1='xx', c2='oo')
        # obj.save()
    

    Tb1是类名

    删除数据

    models.Tb1.objects.filter(name='seven').delete()
    

    修改

    #更新一条数据
    color_obj=models.Colors.objects.get(colors="黑")
    color_obj.colors="灰"
    color_obj.save()
    #更新多条数据,把满足条件的球的description都变为灰球
    #写法1:
    models.Ball.objects.filter(color__colors="红").update(description="灰球")
    #写法2:
    up_dic={"description":"灰球"}
    models.Ball.objects.filter(id__gt=0).update(**up_dic)
    

    # models.Tb1.objects.get(id=123)         # 获取单条数据,不存在则报错(不建议)
    # models.Tb1.objects.all()               # 获取全部
    # models.Tb1.objects.filter(name='seven') # 获取指定条件的数据
    

    其他操作

    # 获取个数
    #
    # models.Tb1.objects.filter(name='seven').count()
    
    # 大于,小于
    #
    # models.Tb1.objects.filter(id__gt=1)              # 获取id大于1的值
    # models.Tb1.objects.filter(id__lt=10)             # 获取id小于10的值
    # models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值
    
    # in
    #
    # models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
    # models.Tb1.objects.exclude(id__in=[11, 22, 33])  # not in
    
    # contains
    #
    # models.Tb1.objects.filter(name__contains="ven")
    # models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
    # models.Tb1.objects.exclude(name__icontains="ven")
    
    # range
    #
    # models.Tb1.objects.filter(id__range=[1, 2])   # 范围bettwen and
    
    # 其他类似
    #
    # startswith,istartswith, endswith, iendswith,
    
    # order by
    #
    # models.Tb1.objects.filter(name='seven').order_by('id')    # asc
    # models.Tb1.objects.filter(name='seven').order_by('-id')   # desc
    
    # limit 、offset
    #
    # models.Tb1.objects.all()[10:20]
    
    # group by
    from django.db.models import Count, Min, Max, Sum
    # models.Tb1.objects.filter(c1=1).values('id').annotate(c=Count('num'))
    # SELECT "app01_tb1"."id", COUNT("app01_tb1"."num") AS "c" FROM "app01_tb1" WHERE "app01_tb1"."c1" = 1 GROUP BY "app01_tb1"."id"
    

    进阶操作

  • 相关阅读:
    直接报错了:无法加载文件 C:UsersAdministratorAppDataRoaming pmvue.ps1,因为在此系统中禁止执行脚本
    [vue系列]-vue+vue-i18n+elementUI 国际化
    new vue 实例发生了什么呢?
    vue引用外部JS的两种方案
    web轻量级富文本框编辑
    Cannot read property '_withTask' of undefined
    element 动态合并表格
    前端如何获取原始图片大小
    ASP.Net Core使用Ajax局部更新
    ASP.NET Core中的jQuery Unobtrusive Ajax帮助器
  • 原文地址:https://www.cnblogs.com/wspblog/p/6170742.html
Copyright © 2011-2022 走看看