Django-数据库操作-未完
Django-数据库操作
在settings.py文件中:
1 | import pymysql # 一定要添加这两行!通过pip install pymysql! |
创建数据 数据类型
1 | from django.db import models |
创建数据库一共需要三步:
修改models.py中模型
运行python3 manage.py makemigrations为改动创建迁移记录
运行python3 manage.py migrate,将操作同步到数据库。
数据增删改查
数据的添加方法:一步到位的方法
1 | data.objects.create(User='zz') |
单个赋值的方法
1 | datas = data() |
查
常规的有5种方法获取数据,返回都是数据集
第一种是 data.objects.all()
这种方法获取的是这张表里面的所有数据
第二种是 data.objects.get(id=1)
这个比较坑,不常用,找不到直接异常
这种方法必须确保获取的结果只有一个(多个对象会直接异常),没有匹配条件的时候会报异常,获取的条件是id=1
第三种方法是 data.objects.filter(id=2)
这种方法是筛选出id=2的数据,括号内还能有多个条件,比如(id=2,gender=’boy’)
第四种方法是 data.objects.exclude(id=2)
这种方法是获取到id不等于2的数据
第五种方法是 data.objects.order_by(name)
这种方法获取到的结果是按照name进行排序后的结果
获取单个对象
第一种方法是 data.objects.first(name=’zeo’)
data.objects.last(name=’zeo’)
这种方法获取到的结果是符合条件的第一个对象,当然还有最后一个对象,使用的是.last(name=’小桃红’)
注释:这些方法都可迭代使用
按照日期获取当天数据
1 | from django.utils import timezone |
其他按照时间获取数据方法
1、gt:大于某个时间
now = datetime.datetime.now()
start = now – datetime.timedelta(hours=23, minutes=59, seconds=59)
a=yourobject.objects .filter(youdatetimcolumn__gt=start)#前一天
2、gte:大于等于某个时间:
a=yourobject.objects .filter(youdatetimcolumn__gte=start)
3、lt:小于
a=yourobject.objects .filter(youdatetimcolumn__lt=start)
4、lte:小于等于
a=yourobject.objects .filter(youdatetimcolumn__lte=start)
5、range:查询时间段
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Entry.objects.filter(pub_date__range=(start_date, end_date))
6、year:查询某年
Entry.objects.filter(pub_date__year=2005)
7、month:查询某月
Entry.objects.filter(pub_date__month=12)
8、day:某天
Entry.objects.filter(pub_date__day=3)
9、week_day:星期几
Entry.objects.filter(pub_date__week_day=2)
10、获取今天的日期,日期格式为yyyy-MM-dd
from django.utils.timezone import now, timedelta
date = now().date() + timedelta(days=-1) #昨天
date = now().date() + timedelta(days=0) #今天
date = now().date() + timedelta(days=1) #明天
以上方法获取的数据的结果是QuerySet()类型的数据,是一个结果类,想要获取最后的实际结果,需要使用索引获取
datas = data.objects.filter(id=2).values()[0]
这样的结果是一个字典,索引0即是获取values()列表的第一个结果
当然你也可以使用赋予变量的形式进行获取
1 | datas = data.objects.get(id=1) |
如果是all()或者其他方法获取较多的数据集时候,也可以这样获取每个结果
1 | data_0 = data.objects.all() |
像这种的集合,如果想要把里面的数据全都打印出来,可以这么处理
1 | ret = '' |
批量操作,查询加修改
1 | all_subdomains.filter(subdomain_ip=all_subdomain_one.subdomain_ip).update(nmapscan=result_domain_ports_numbners) |