要想在一个另外的py文件中操作django,可以使用如下的代码
import os os.environ.setdefault("DJANGO_SETTINGS_MODULE",'mysite.settings') #mysite用的是自己的project import django django.setup() from app01 import models #app01是项目名
基本操作
方法 | 解释 |
get() | 获取指定条件的对象,在views.py里面有且只能有一个,否则报错 |
all() | 获取所有对象 |
filter() | 获取满足条件的所有对象 ---》对象列表 |
exclude() | 获取所有不满足条件的对象,也就是get()的取反 |
values() | 括号内有参数就是获取指定字段的结果,不写就是显示所有字段 |
values_list() | 区别于values,是以元组的形式来表示 |
order_by() | 以某个字段来排列,- 是以降序排列 |
reverse() | 对排列好的结果取反 |
distinct() | 去重
models.Book.objects.all().values("price").distinct() |
count() | 计算结果的数量 |
first() | 取出满足条件的第一个结果 |
last() | 取出满足条件的最后一个结果 |
exists() | 判断结果是否存在 |
delete() | 删除记录
models.Book.objects.filter(price__lte=100).delete() |
update() | 修改记录
models.Book.objects.filter(title__startswith="py").update(price=120) |
下面是举例:
首先我们设置打印格式:
class User(models.Model): id=models.AutoField(primary_key=True) name=models.CharField(max_length=32,db_column='user',verbose_name='姓名') age=models.IntegerField(verbose_name='年龄') birth=models.DateTimeField(auto_now=True,null=True) def __str__(self): return "<User:id-{} name-{}>".format(self.id,self.name) class Meta: #数据库的表面修改,自定义 db_table="user" #admin中显示的表名称 verbose_name='个人信息' #在admin中Site administration显示 verbose_name_plural='所有用户信息'
下面是一些双下滑线的操作命令:
__gt= 大于某个数
__lt= 小于某个数
__lte= 小于等于某个数
__in=[] 在某些数字中
__range=[1,3] 在一和三之间
__contain= 包含
__icontain= 包含忽略大小写
__year= 某个时间字段中的年
__startwith endswith 以什么开始,以什么结尾
举例
ret1=models.User.objects.filter(id__gt=1) # <QuerySet [<User: <User:id-2 name-he>>, <User: <User:id-3 name-ren>>, <User: <User:id-4 name-wo>>]> print(ret1) #查询在某个区间的结果,可以放入不在数据库里面的id ret2=models.User.objects.filter(id__in=[1,2,4,100]) print(ret2) #查询在某个范围的结果 ret3=models.User.objects.filter(id__range=[1,3]) print(ret3) #包含 ret4=models.User.objects.filter(name__contains='e') print(ret4) #忽略大小写,在sqlite数据库里面和contains是一样的,可以使用mysql验证 ret5=models.User.objects.filter(name__icontains='e') print(ret5) #查询字段birth的时间中year是2018 ret6=models.User.objects.filter(birth__year='2018') print(ret6)