python学习第七十四天:单表查询
Posted luck_L
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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‘,
},
}
}
以上是关于python学习第七十四天:单表查询的主要内容,如果未能解决你的问题,请参考以下文章
(十四)Mysql 单表 VS 联表(全文很长,你要认真点)
(十四)Mysql 单表 VS 联表(全文很长,你要认真点)
(十四)Mysql 单表 VS 联表(全文很长,你要认真点)