ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

django数库库模型参数用法笔记

2021-10-01 11:00:06  阅读:150  来源: 互联网

标签:返回 查询 aware 查找 大小写 django 数库库 用法


pythonclicnt:是mysql-python的分支是C语言编写的执行效率高,支持python3,django默认的驱动
数据库配置
ENGINE:数据库引擎
MAME:数据库名
USER:用户名
PASSWORD:密码
HOST:IP地址
PORT:端口
原生SQL语言操作
django.db.connection自动读取settings.py中的数据库配置信息
connection.cursor()获取游标,
execute("sql语句")游标对象执行SQL语句
fetchall()获取所有数据
close()关闭游标

在安装django.默认会pytz时区库,
import pytz
pytz.timezone("UTC")
now.astimezone("要转换的aware类型").不能转换navie时间
now.replace(tzinfo=pytz.timezone('Asia/Shanghai'))
django.utils.timezone.now,django内置的获取nowutc时间设置为aware类型
django.utils.timezone.localtime方法将一个aware类型时候转换成一个sattings设置的时区时间。
template模板默认自动转换成sattings.py里设置的地区时间.也可以通过滤器
localtime设置要导入{% load tz %}
django.utils.timezone.make_aware:把navie转为aware格式
datetime.strptime(string,"%Y/%m/%d")指定的格式把一个时间字符串解析为datetime类型的时间
datetime.today()当前时间

urllib.parse,parse.urlencode({})把一个字典格式化成一个查询字符串

 

add保存一不用调用save()方法
一对多可以使用bulk=false,反转使用子表名小写_set
一对一可以使用反向引用子表名的小写
多对多不可使用bulk=false,反转使用子表名小写_set

Foreignkey()一对多
OneToOneField()一对一
ManyToManyField()多对多,
related_name 反转自定义名字
related_query_name 跨表查询自定义名字

filter返回所有满足条件的
exclude排除满足条件的
get返回一个满足条件的,返回多条数据或者没返回数据都会报错
update更改数据
order_by:查询结果进行排序
values:返回的字典指定在提取数据出来需要提取那些字段,默认是提取全部
values_list:类似返回的是元组,flat=True
all:获取这个ORM模型的Qeruyset对象
select_related: 多对一的时候,和一对一的时候才能使用,外键引用的
prefetch_related:类似select_related减少sql语句查询次数,解决一对多,多对多的反向查询的
defer:过滤字段返回的是模型,id是不可以过滤的
only:类似defer返回的是模型,提取指定字段
create:创建一条数据并保存在数据库中
get_or_create:根据某个条件进行查找,如果找到就返回没有就创建
bulk_create:一次性创建多条数据
count:获取提取的数据个数比len函数更高效
first\last返回Queryset第一条和最后一条数据
exists:判断某个条件的数据是否存在,比count高效
distinct:去除掉重复的数据,用的mysql:注如果在之前使用了order_by进行排序那么根据多个字段进行唯一化
delete:删除所有满足条件的


查询条件
exact: 精确 = ,SQL语句翻译成 =
iexact: 大部分情况下跟=一样,SQL语句翻译成LIKE
contans:大小写敏感
icontans:大小写不敏感,包含查询
in:提取满足在list、tuple、或者是其他迭代的对象,包括QuerySet()对象
gt:大于
gte:大于等于
lt:小于
lte:小于等于
startswith:判断某个字段的值是否是以某个值开始
istariswith:大小写不敏感。判断某个字段的值是否是以某个值开始
endswith:判断以某个字段结束
iendswith:不区分大小写,判断以某个字段结束
range=(aware,aware):取中间值,make_aware从navie转换成aware
date:指定查询针对date和datetime字段的时间
year:年份进行查找
month:月份进行查找
day:日期进行查找
week_day:星期几进行查找,1星期天7星期六,2-6周一至周五
time:根据时间进行查找
isnull:根据是否能为False进行摸查
regex和iregex:
大小写敏感,和大小写不敏感的正则表达式
根据关联表进行查询
表名小写__子类字段__条件

聚合函数
aggregate(AVG("字段"))默认聚合函数的名字field_聚合函数,如想自定义名称只需要在前面name=就好
connaction.queries
annotate:当前这个模型进行分组,group by, 返回的是一个Queryset对象,会新增一个字段

Avg()求平均值
Count()获取对象个数
Max()和Min()指定对象的最大值与最小值
Sum()指定对象的总和


文件上传
form enctype='multipart/form-data'及input的name设置为file
with open('filename.txt','wb') as fp:
for chunk in files.chunks()
fp.write(chunk)

使用field的方式
FileField(upload_to='files')专门用来处理文件的存储的是文件路径,upload_to=设置上传来文件位置,也可以在media设置文件夹根据年月日再进行区分(%Y%m%d)
ImageField(upload_to='files'): 验证是不是图片后缀并验证是不是一个可用的图片注:使用这个ImageField必须安装一个pip install pillow库

设置settings.by设置上传的文件路径
MEDIA_ROOT=os.path.join('BASE_DIR','media')指定上传的文件目录
MEDIA_URL='/media/'访问上传的文件用什么路经查找

如果想要在浏览器上访问文件还需要设置一个路径映射
django.conf.urls.static.static
django.conf.settings
static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

按年月日进行分组,再使用聚合函数取每天晚的时间
count_da时候 = flashes.extra(select={"pub_time": "DATE_FORMAT(pub_time,'%%Y%%d%%e')"}).values('pub_time').annotate(send_num=Max('pub_time'))

标签:返回,查询,aware,查找,大小写,django,数库库,用法
来源: https://www.cnblogs.com/uuc789/p/15358957.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有