Django 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
找到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()
-
查询数据
查询所有,数据类型: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)
-
删除
-
更新
-
各双下划线查询条件
__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