Django-数据库操作-未完

Django-数据库操作

在settings.py文件中:

import pymysql         # 一定要添加这两行!通过pip install pymysql!
pymysql.install_as_MySQLdb()
# 修改DATABASES的值
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite',
        'HOST': '192.168.1.1',
        'USER': 'root',
        'PASSWORD': 'pwd',
        'PORT': '3306',
    }
}

创建数据 数据类型

from django.db import models
class UserInfo(models.Model):
    uid = models.AutoField(primary_key=True)
    # 自增长ID,必须带参数为primary_key=True,并且是唯一主键
    user = models.CharField(max_length=10)
    # 字符串类型,最大长度为10
    age = models.IntegerField(default=1)
    # 数字类型,默认为1
    sex = models.BooleanField()
    # BOOL类型
    email = models.EmailField()
    # 自带检查 Email 合法性的 CharField
    Intor = models.TextField()
    # 长文本类型
    Blog = models.URLField()
    # 自带检查 URL 合法性的 CharField

    # -------------------文件上传-----------------
    upload = models.FileField(upload_to='uploads/')
    # 文件上传到 MEDIA_ROOT/uploads
    # 这个字段不能设置primary_key和unique选项.在数据库中存储类型是varchar,默认最大长度为100.
    upload_s = models.FileField(upload_to='uploads/%Y/%m/%d/')
    # 文件上传到 MEDIA_ROOT/uploads/2019/07/04

    upload_e = models.FilePathField(path="/home/images", match="foo.*", recursive=True)
    # 这个字段的值被限制在系统上某个目录中的所有文件名集合中。有三个参数
    #     path = '':  该参数必需。上行所说的‘某个目录’的绝对路径。Example: "/home/images".
    #     match = 'pattern':  可选参数。格式是正则表达式。用来拣选符合匹配正则表达式的文件
    #     recursive = True / False: 可选参数,默认为False。设定是否递归该目录下所有子目录的所有文件

    add_date = models.DateTimeField(auto_now_add=True)
    # 设置初次创建的时间
    update_date = models.DateTimeField(auto_now=True)
    # 设置最后修改的时间

创建数据库一共需要三步:

修改models.py中模型
运行python3 manage.py makemigrations为改动创建迁移记录
运行python3 manage.py migrate,将操作同步到数据库。

数据增删改查

数据的添加方法:一步到位的方法

data.objects.create(User='zz')

单个赋值的方法

datas = data()
datas.User = '陈二狗'
datas.save()

常规的有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=’小桃红’)

注释:这些方法都可迭代使用

按照日期获取当天数据

from django.utils import timezone
from datetime import timedelta
now = timezone.now()
start = now - timedelta(hours=23,minutes=59,seconds=59)
CurrentDaySubdomain = URL.objects.filter(change_time__gt=start)
for c in CurrentDaySubdomain:
    print(c.url)

其他按照时间获取数据方法

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()列表的第一个结果

当然你也可以使用赋予变量的形式进行获取

datas = data.objects.get(id=1)
u_id = datas.id
u_User = datas.User

这种方式进行获取数据,这个前提是在只有一个数据的情况下进行

如果是all()或者其他方法获取较多的数据集时候,也可以这样获取每个结果

data_0 = data.objects.all()
# 这里的结果是一个数据集合,可以循环迭代和使用索引获取值
data_1 = data_0[0]
u_id = data_1.id
u_User = data_1.User
# 通过这样的方式,就可以实现进行单独数据的获取

像这种的集合,如果想要把里面的数据全都打印出来,可以这么处理

ret = ''
data_0 = data.objects.all()
for data_1 in data_0:
    ret += data_1.id + '|' + data_1.User + '<br>'

批量操作,查询加修改

all_subdomains.filter(subdomain_ip=all_subdomain_one.subdomain_ip).update(nmapscan=result_domain_ports_numbners)
all_subdomains.filter(subdomain_ip=all_subdomain_one.subdomain_ip).update(nmapscan_ports=result_domain_ports)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值