zoukankan      html  css  js  c++  java
  • Django ORM操作

    一、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)
    1. 查询数据

    查询所有,数据类型: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)
     

    1. 删除

    2. 更新

    • 各双下划线查询条件

    __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

  • 相关阅读:
    转:Windows Socket五种I/O模型
    C++线程池的实现(二)
    C++ 简单 Hash容器的实现
    C++ TrieTree(字典树)容器的实现
    转载:C++线程池的一个实现
    C++用数组实现的静态队列
    C++ 类成员函数作为参数
    C++位操作符总结
    C++简单单例模式
    C++控制程序只运行一个实例
  • 原文地址:https://www.cnblogs.com/shiqi17/p/9618403.html
Copyright © 2011-2022 走看看