Django ORM操作

本文详细介绍了ORM(Object-Relational Mapping)在Django框架中的使用方法,包括dbfirst和codefirst两种模式的对比,以及如何在代码中创建、查询、更新和删除数据库表。此外,还讲解了设置数据库连接、使用pymysql模块替代mysqldb的过程,以及各种查询条件和操作命令。
摘要由CSDN通过智能技术生成
一、ORM关系对象映射

 

1.1 db first
  • 先手动在数据库建库,建立表结构,再根据表结构在代码中生成类
1.2 code first
  • 先直接在代码中写好类,设计表结构,然后通过ORM命令自动去创建这些表

  • 创建命令:
    python manage.py makemigrations
    python manage.py mkgrate

  • 创建类:必须继承 models.Model

from django.db import models

class UserInfo(models.Model):
    id = models.AutoField(primary_key=True)  #主键自增ID 对应mysql中id int not null auto_increment primary key
    name = models.CharField(max_length=32) #对应mysql 中 name char(32) not null

 

1.3 修改project同名下的settings文件

找到setting.py文件下的:DTABASES

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #配置成自己要使用的数据库
        'NAME': 'blog', #数据库名
        'USER': 'username', #用户名
        'PASSWORD': 'xxxxxxxxx', #用户密码
        'HOST': 'localhost', #ip地址
        'PORT': '3306'  #端口
    }
}
  • 因为django 默认使用mysqldb模块在Py3中没有,所以这儿改用pymysql
    在project同名的__init__.py 文件中:
    import pymysql
     
    pymysql.install_as_MySQLdb()
二、ORM中的增删改查
  1. 增加数据:

    models.TB_name.objects.create(filed1= 'xxx', field2= 'xxxx') #第一种创建方式
     
    obj = models.TB_name(field1= 'xxx', field2= 'xxxx') #第二种创建方式
    obj.save()
     
    dic = {'field1': 'xxx', 'field2': 'xxxx'}
    models.TB_name.objects.create(**dic)

  2. 查询数据

    查询所有,数据类型:Query_set 类似列表
    res = models.TB_name.objects.all()
    res[0].field1 #列表中存着一个个 Query_set实例,通过点字段名来访问数据
     
    查询所有,数据类型:Query_set 类似列表
    res = models.TB_name.objects.filter(id__gt=1, field2= 'xxxx')
    相当于mysql 中 select * from TB_name where id>1 and field2= 'xxxx';
     
    统计总共有多少数据.count()
    models.TB_name.objects.all().count()
     
    查询排序.order_by()
    models.TB_name.objects.all().order_by()
     
    范围查询一.filter(id__range=[3,7[)
     
    范围查询二 .filter(id__in= [2,4,5,6,7])
     

    条件选取querySet的时候,filter表示=,exclude表示!=。

    查询除了匹配条件之外的所有.exclude(id__gt=3)
    models.TB_name.objects.exclude(id__gt=3)
    先exclude后filter:
    models.TB_name.objects.exclude(xxxx=xx).filter(xxxx=xx)
     

  3. 删除

  4. 更新

  • 各双下划线查询条件

    __exact 精确等于 like 'aaa'
    __iexact 精确等于 忽略大小写 ilike 'aaa'
    __contains 包含 like '%aaa%'
    __icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
    __gt 大于
    __gte 大于等于
    __lt 小于
    __lte 小于等于
    __in 存在于一个list范围内
    __startswith 以...开头
    __istartswith 以...开头 忽略大小写
    __endswith 以...结尾
    __iendswith 以...结尾,忽略大小写
    __range 在...范围内
    __year 日期字段的年份
    __month 日期字段的月份
    __day 日期字段的日
    __isnull=True/False

 

转载于:https://www.cnblogs.com/shiqi17/p/9618403.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值