标签: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