标签:mail 查询 更新 修改 text head val style 划线
前言:
一些说明:
一、常用字段:
1.1
AutoField int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。 IntegerField 一个整数类型,范围在 -2147483648 to 2147483647。(一般不用它来存手机号(位数也不够),直接用字符串存,) CharField 字符类型,必须提供max_length参数, max_length表示字符长度。
日期字段,日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例。
日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例。
1.2 字段集合:
AutoField(Field)
- int自增列,必须填入参数 primary_key=True
BigAutoField(AutoField)
- bigint自增列,必须填入参数 primary_key=True
注:当model中如果没有自增列,则自动会创建一个列名为id的列
from django.db import models
class UserInfo(models.Model):
# 自动创建一个列名为id的且为自增的整数列
username = models.CharField(max_length=32)
class Group(models.Model):
# 自定义自增列
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
SmallIntegerField(IntegerField):
- 小整数 -32768 ~ 32767
PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正小整数 0 ~ 32767
IntegerField(Field)
- 整数列(有符号的) -2147483648 ~ 2147483647
PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正整数 0 ~ 2147483647
BigIntegerField(IntegerField):
- 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807
BooleanField(Field)
- 布尔值类型
NullBooleanField(Field):
- 可以为空的布尔值
CharField(Field)
- 字符类型
- 必须提供max_length参数, max_length表示字符长度
TextField(Field)
- 文本类型
EmailField(CharField):
- 字符串类型,Django Admin以及ModelForm中提供验证机制
IPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
GenericIPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
- 参数:
protocol,用于指定Ipv4或Ipv6, ‘both‘,"ipv4","ipv6"
unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both"
URLField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证 URL
SlugField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
CommaSeparatedIntegerField(CharField)
- 字符串类型,格式必须为逗号分割的数字
UUIDField(Field)
- 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
FilePathField(Field)
- 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
- 参数:
path, 文件夹路径
match=None, 正则匹配
recursive=False, 递归下面的文件夹
allow_files=True, 允许文件
allow_folders=False, 允许文件夹
FileField(Field)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
ImageField(FileField)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
width_field=None, 上传图片的高度保存的数据库字段名(字符串)
height_field=None 上传图片的宽度保存的数据库字段名(字符串)
DateTimeField(DateField)
- 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
DateField(DateTimeCheckMixin, Field)
- 日期格式 YYYY-MM-DD
TimeField(DateTimeCheckMixin, Field)
- 时间格式 HH:MM[:ss[.uuuuuu]]
DurationField(Field)
- 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型
FloatField(Field)
- 浮点型
DecimalField(Field)
- 10进制小数
- 参数:
max_digits,小数总长度
decimal_places,小数位长度
BinaryField(Field)
- 二进制类型
对应关系: ‘AutoField‘: ‘integer AUTO_INCREMENT‘, ‘BigAutoField‘: ‘bigint AUTO_INCREMENT‘, ‘BinaryField‘: ‘longblob‘, ‘BooleanField‘: ‘bool‘, ‘CharField‘: ‘varchar(%(max_length)s)‘, ‘CommaSeparatedIntegerField‘: ‘varchar(%(max_length)s)‘, ‘DateField‘: ‘date‘, ‘DateTimeField‘: ‘datetime‘, ‘DecimalField‘: ‘numeric(%(max_digits)s, %(decimal_places)s)‘, ‘DurationField‘: ‘bigint‘, ‘FileField‘: ‘varchar(%(max_length)s)‘, ‘FilePathField‘: ‘varchar(%(max_length)s)‘, ‘FloatField‘: ‘double precision‘, ‘IntegerField‘: ‘integer‘, ‘BigIntegerField‘: ‘bigint‘, ‘IPAddressField‘: ‘char(15)‘, ‘GenericIPAddressField‘: ‘char(39)‘, ‘NullBooleanField‘: ‘bool‘, ‘OneToOneField‘: ‘integer‘, ‘PositiveIntegerField‘: ‘integer UNSIGNED‘, ‘PositiveSmallIntegerField‘: ‘smallint UNSIGNED‘, ‘SlugField‘: ‘varchar(%(max_length)s)‘, ‘SmallIntegerField‘: ‘smallint‘, ‘TextField‘: ‘longtext‘, ‘TimeField‘: ‘time‘, ‘UUIDField‘: ‘char(32)‘,
1.3 字段参数:
null 用于表示某个字段可以为空。 unique 如果设置为unique=True 则该字段在此表中必须是唯一的 。 db_index 如果db_index=True 则代表着为此字段设置索引。 default 为该字段设置默认值。
1.4 DateField 和DateTimefield
auto_now_add 配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。 auto_now 配置上auto_now=True,每次更新数据记录的时候会更新该字段。
二、test 数据数据的增删改查 以及关系字段
1.1 test 数据数据的增
import os if __name__ == ‘__main__‘: os.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘, ‘day58.settings‘) import django django.setup() from app01 import models # 注意:必须在下面导入否则会报错 # 数据库新增 # <1>基于create 的新增创建 res = models.User.objects.create(name=‘koko‘,age=23,register_time=‘2019-6-1‘) print(res.register_time) # <2>基于user_obj 的绑定方法进行创建 user_obj = models.User(name=‘yye‘,age=26,register_time=‘2018-12-31‘) print(user_obj) user_obj.save() # 产生对象直接保存 print(user_obj.register_time) from datetime import datetime currenttime = datetime.now() # 创建当前时间 #注意创建时间是auto_now_add() res1 = models.User.objects.create(name=‘jason‘,age=29,register_time=currenttime) print(res1.register_time)
1.2 test 数据数据的改
# 修改数据 <1>update() # 过滤名字是Alice 然后将age更改为18 models.User.objects.filter(name=‘Alice‘).update(age=18) # 修改名字<2>基于对象 user_obj = models.User.objects.filter(name=‘yye‘).first() print(user_obj) # 不加first前<QuerySet [<User: 返回的对象:yye>]> user_obj.name = ‘liuee‘ user_obj.save()
1.3 数据库的删除:
# <1> 基于Queryset对象
models.User.objects.filter(name=‘koko‘).delete()
# 将所有的name=‘koko‘的结果一并删除
# <2>基于对象
user_obj = models.User.objects.filter(name=‘jason‘).first()
user_obj.delete()
1.4 数据库的查询:
# <1> all() 查询所有结果
user_obj = models.User.objects.all()
print(user_obj) # 得到所有的对象
# <2> filter(**kwargs):包含了与所给的筛选条件对象
res = models.User.objects.filter(name=‘egon‘,age=35)
print(res,type(res)) # 返回一个人<QuerySet [<User: 返回的对象:egon>]>
# 注意:filter()内可以放多个筛选条件 单是多个条件之间的and关系
# <3> .get()方法这里对Query对象不建议使用,没有结果会报错
res1 = models.User.objects.get(name=‘liuee‘)
print(res1,type(res1)) #返回的对象:liuee
# <4> exclude(**kwargs):取反 返回除了自己以外所有对象
res2 = models.User.objects.exclude(name=‘egon‘)
print(res2) #<QuerySet [<User: 返回的对象:Alice>, <User: 返回的对象:liuee>]>
# <5>oder_by(*field):对于查询3结果进行排序 order by 参数1,参数2 排序查询、asc升序、desc降序
# sqlite> SELECT * FROM COMPANY ORDER BY NAME DESC;
#sqlite> SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;
res3 = models.User.objects.order_by(‘age‘) # asc 默认升序升序
res4 = models.User.objects.order_by(‘-age‘) # 减号‘-‘为降序
print(res3)
print(res4)
# <6> reverse():对查询的结果先排序才能反向
res6 = models.User.objects.order_by(‘age‘) .reverse()
print(res6) # 之前为默认升序 加reverse()为反序
# <7>count():
# res7 = models.User.objects.count()
res7 = models.User.objects.all().count()
print(res7) # 5个数据库主目前确实只有5个对象 这里不加all()也是查全部
# <8>first():返回第一条记录
# (1)res8 = models.User.objects.all().first() # 从前往后拿第一条
# res8:<QuerySet [<User: 返回的对象:Alice>, <User: 返回的对象:liuee>, <User: 返回的对象:egon>,
# <User: 返回的对象:jason>, <User: 返回的对象:tank>]>
res8 = models.User.objects.all()[0] # query对象去索引[0]和first()是一样的 但是注意不支持负数索引
# res0= models.User.objects.all()[-1] # AssertionError: Negative indexing is not supported.
print(res8)
# print(res0)
# <9>last(): 查询所有数据中的结果返回最后一条
res9 = models.User.objects.all().last()
print(res9) # 返回的对象:tank
# <10> exists():存在返回True 不存在则返回false
res10 = models.User.objects.all().exists()
res10a = models.User.objects.filter(name=‘egon‘,age=5).exists()
print(res10) # True
print(res10a) # False
# <11>values(*field)可以传多个值:通过name条件返回一个valueQueryset--一个特殊的Queryset
# 运行后得到的并不是一系列modle的实列对象,而是一个人可以迭代的字典序列[{},{},{}]
res11 = models.User.objects.values(‘name‘)
print(res11)
# <QuerySet [{‘name‘: ‘Alice‘}, {‘name‘: ‘liuee‘},
# {‘name‘: ‘egon‘}, {‘name‘: ‘jason‘}, {‘name‘: ‘tank‘}]>
res11a = models.User.objects.values(‘name‘,‘age‘)
print(res11a)
# <QuerySet [{‘name‘: ‘Alice‘, ‘age‘: 18}, {‘name‘: ‘liuee‘, ‘age‘: 26},
# {‘name‘: ‘egon‘, ‘age‘: 35}, {‘name‘: ‘jason‘, ‘age‘: 26}, {‘name‘: ‘tank‘, ‘age‘: 28}]>
# values_list(*field):他与values()非常的相识
# 它返回的是一个元祖序列,而values返回的是一个字典序列
res12 = models.User.objects.values_list(‘name‘,‘age‘)
print(res12)
# <QuerySet [(‘Alice‘, 18), (‘liuee‘, 26), (‘egon‘, 35),
# (‘jason‘, 26), (‘tank‘, 28)]>
# <13> distinct():数据必须完全相同
res13 = models.User.objects.values(‘name‘,‘age‘).distinct()# 注意用values()进行值的筛选
print(‘--------------‘)
print(res13) # 删除相同的字段名只保留第一个
1.5 神奇的双下划线查询:
二、多表查询:
2.1 增
2.2 删
2.3 改
2.4 查
标签:mail 查询 更新 修改 text head val style 划线
原文地址:https://www.cnblogs.com/mofujin/p/11013522.html