python学习第七十四天:单表查询

单表查询

创建表

创建模型
在models.py中定义类,一个类就是一张表
from django.db import models

class Book(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=64)
    pub_data = models.DateField()
    price = models.DecimalField(max_digits=5, decimal_places=2)
    publish = models.CharField(max_length=12)
    def __str__(self):
        return self.name
字段与参数
AutoField                   自增长
BigAutoField
SmallIntegerField           小整数 -32768 ~ 32767
PositiveSmallIntegerField   正小整数 0 ~ 32767
IntegerField                -2147483648 ~ 2147483647
PositiveIntegerField        0 ~ 2147483647
BigIntegerField             -9223372036854775808 ~ 9223372036854775807
BooleanField                布尔值类型
NullBooleanField            可以为空的布尔值
CharField                   字符类型,必须提供max_length参数
DateField                   日期格式      YYYY-MM-DD
TimeField                   时间格式      HH:MM[:ss[.uuuuuu]]
FloatField                  浮点型
DecimalField                10进制小数
    参数:
    max_digits,小数总长度
    decimal_places,小数位长度
BinaryField                 二进制类型
参数
null        如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False.
blank       如果为True,该字段允许不填。默认为False。
default     字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。
primary_key 如果为True,那么这个字段就是模型的主键。
unique      如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的
choices     由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。

settings配置

DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘lqz‘,
        ‘USER‘: ‘root‘,
        ‘PASSWORD‘: ‘123456‘,
        ‘HOST‘: ‘127.0.0.1‘,
        ‘PORT‘: 3306,
        ‘ATOMIC_REQUEST‘: True
    }
}
ATOMIC_REQUEST设置为True统一个http请求对应的所有sql都放在一个事务中执行(要么所有都成功,要么所有都失败)。
是全局性的配置, 如果要对某个http请求放水(然后自定义事务),可以用non_atomic_requests修饰器

增加删除字段

    删除,直接注释掉字段,执行数据库迁移命令即可

  新增字段,在类里直接新增字段,直接执行数据库迁移命令会提示输入默认值,此时需要设置
  
注意:
  1 数据库迁移记录都在 app01下的migrations里
  2 使用showmigrations命令可以查看没有执行migrate的文件
  3  makemigrations是生成一个文件,migrate是将更改提交到数据量

添加表记录

方式一:

book_obj=Book.objects.create(title="python",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")

方式二

book_obj=Book(title="python",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")
book_obj.save()

查询表记录

all()               查询所有结果
filter(**kwargs)    返回QuerySet对象,它包含了与所给筛选条件相匹配的对象
get(**kwargs)       只能查询只有一个符合条件的对象,返回该对象
exclude(**kwargs)   它包含了与所给筛选条件不匹配的对象
order_by(*field)    对查询结果排序(‘id‘)默认由小到大,(‘-id‘)又大到小
reverse()           对查询结果反向排序
count()             返回数据库中匹配查询(QuerySet)的对象数量。
first()             返回第一条记录
last()              返回最后一条记录
exists()            如果QuerySet包含数据,就返回True,否则返回False
values(*field)      返回一个ValueQuerySet,其中包含的是一个个字典
values_list(*field) values()返回的QuerySet中的字典变元组
distinct()          从返回结果中剔除重复纪录
模糊查询
Book.objects.filter(price__in=[100,200,300])
Book.objects.filter(price__gt=100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__gte=100)
Book.objects.filter(price__lte=100)
Book.objects.filter(price__range=[100,200])
Book.objects.filter(title__contains="python")
Book.objects.filter(title__icontains="python")
Book.objects.filter(title__startswith="py")
Book.objects.filter(pub_date__year=2012)

删除记录

queryset对象可以调用,对象可以调用
ret=Book.objects.filter(name=‘水浒传‘).delete()
ret=Book.objects.filter(name=‘红楼梦‘).first().delete()
(1, {‘app01.Book‘: 1})  1 影响一条记录   被影响的表名   1 影响这个表的记录
print(ret)
这不可以 manager对象
ret=Book.objects.delete() #这个是manager对象,不可以
这个可以
ret=Book.objects.all().delete()

修改记录

Book.objects.filter(title__startswith="py").update(price=120)
返回值为影响的条数

在python脚本中调用Django环境

import os
if __name__ == ‘__main__‘:
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled15.settings")
    import django
    django.setup()

    from app01 import models

    books = models.Book.objects.all()
    print(books)

Django终端打印SQL语句

LOGGING = {
    ‘version‘: 1,
    ‘disable_existing_loggers‘: False,
    ‘handlers‘: {
        ‘console‘:{
            ‘level‘:‘DEBUG‘,
            ‘class‘:‘logging.StreamHandler‘,
        },
    },
    ‘loggers‘: {
        ‘django.db.backends‘: {
            ‘handlers‘: [‘console‘],
            ‘propagate‘: True,
            ‘level‘:‘DEBUG‘,
        },
    }
}

原文地址:https://www.cnblogs.com/luck-L/p/9621071.html

时间: 2024-11-10 14:25:48

python学习第七十四天:单表查询的相关文章

mysql四-1:单表查询

阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询 一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 f

Mysql(四)-1:单表查询

一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 from where group by having select distinct order by limit 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3.将取出的一条条记录进行分组group

数据库学习笔记系列(4)——单表查询_1

单表查询就是查询的范围只是一个table,我们对其中的某一个字段,或者多个字段进行查询返回,查询的时候还可以满足一定的条件. 下面我们就按照实际的问题,来学习一下单表查询. 首先,原始的是一个student表,其中有如下几个字段: 学号:snum 姓名:sname 年龄:sage 性别:ssex 院系:department 课程:course 分数:score create table student(snum int(5), sname varchar(10), sage int(5), ss

SQLServer学习笔记<>.基础知识,一些基本命令,单表查询(null top用法,with ties附加属性,over开窗函数),排名函数

Sqlserver基础知识 (1)创建数据库 创建数据库有两种方式,手动创建和编写sql脚本创建,在这里我采用脚本的方式创建一个名称为TSQLFundamentals2008的数据库.脚本如下:   同时往数据库表插入一些数据,用户后续对数据库的sql的练习.在这里有需要的可以下载相应的脚本进行数据库的初始化.我放到百度云上面,请戳 我:http://yun.baidu.com/share/link?shareid=3635107613&uk=2971209779,提供了<Sqlserver

python学习之第十四天补充

本节内容 学员管理系统练习 Django ORM操作进阶 用户认证 Django练习小项目:学员管理系统设计开发 带着项目需求学习是最有趣和效率最高的,今天就来基于下面的需求来继续学习Django 项目需求: 1.分讲师\学员\课程顾问角色,2.学员可以属于多个班级,学员成绩按课程分别统计3.每个班级至少包含一个或多个讲师4.一个学员要有状态转化的过程 ,比如未报名前,报名后,毕业老学员5.客户要有咨询纪录, 后续的定期跟踪纪录也要保存6.每个学员的所有上课出勤情况\学习成绩都要保存7.学校可以

sql学习总结(3)——SQL单表查询技术

基本格式: select [all | distinct] select_list from table_list/view_list [where conditions] [group by group_list] [having conditions] [order by order_list] 例: select 职工号,姓名,工资 as 月工资,(工资*12+5000)/6 as 年奖金 from 职工 select *from 职工 where 仓库号 in (‘wh1’,’wh2’)

python学习【第十篇】单例设计模式

单例设计模式 目的:让类创建对象,在系统中只有唯一的实例,让每一次创建的对象返回的内存地址都是相同的. __new__方法 使用类名创建对象时,python解释器首先会调用__new__方法为对象分配空间 __new__方法是有object基类提供的静态方法,主要作用有两个: 为内存中的对象分配空间 返回对象的引用,python解释器获得引用后会作为第一个参数返回给__init__方法 python中的单例: __new__方法只创建一次空间,返回一次引用 __init___方法只初始化一次 所

salesforce零基础学习(七十四)apex:actionRegion以及apex:actionSupport浅谈

我们在开发中,很难会遇见不提交表单的情况.常用的apex:commandButton,apex:commandLink,apex:actionFunction,apex:actionSupport.他们进行操作的时候,会将整个表单提交.但是我们很多时候的需求,只是希望提交一部分内容,而不是全部.这个时候,我们就需要用到apex:actionRegion. 一.apex:actionRegion apex:actionRegion为当一个ajax请求生成的时候,可以通过它来区分哪部分区域/组件可以

Python学习笔记(十四)

一.序列化与反序列化 Python 中的 pickle模块提供了一种序列化对象的方法 import pickle class Student(object): def __init__(self,name,age,school="新华") self.__name = name self.__age = age self.__school = school def get_dict(slef): return { "name":self.__name, "a