其他分享
首页 > 其他分享> > django数库库模型参数用法笔记

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