当前位置: 首页 > news >正文

免费网站电视剧全免费WordPress微信推广返佣

免费网站电视剧全免费,WordPress微信推广返佣,公司网站建设的市场需求,自己 做 网站文章目录 ORM事务操作什么是事务#xff1f;事务的产生事务的四大特征ORM中如何使用事务 ORM字段类型常用字段与不常用字段类型ORM还支持用户自定义字段类型 ORM字段参数关系字段ForeignKey外键on_delete参数设置的值 OneToOneField与ForeignKey的区别多对多关系建立的方式ORM… 文章目录 ORM事务操作什么是事务事务的产生事务的四大特征ORM中如何使用事务 ORM字段类型常用字段与不常用字段类型ORM还支持用户自定义字段类型 ORM字段参数关系字段ForeignKey外键on_delete参数设置的值 OneToOneField与ForeignKey的区别多对多关系建立的方式ORM中执行SQL语句Meta元信息 ORM事务操作 什么是事务 事务是用户定义的一系列数据库操作这些操作可以视为一个完整的逻辑处理工作单元。 要么全部执行要么全部不执行是不可分割的工作单元 事务的产生 数据库中的数据是共享资源因此数据库系统通常要支持多个用户的或不同应用程序的访问并且各个访问进程都是独立执行的这样就有可能出现并发存取数据的现象为了避免数据库的不一致性这种处理机制称之为并发控制其中事务就是为了保证数据的一致性而产生的的一种概念和手段事务不是唯一手段事务的四大特征 为了保证数据库的正确性与一致性事务具有四个特征 原子性Atomicity 事务的原子性保证事务中包含的一组更新操作是原子的不可分割的。不可分割是事务最小的工作单位所包含的操作被视为一个整体执行过程中遵循着要么全部执行要么全部不执行不存在一半执行一半未执行的情况 一致性Consistency 事务的一致性要求事务必须满足数据库的完整性约束且事务执行完毕后会将数据库由一个一致性的状态变为另一个一致性的状态事务的一致性与原子性是密不可分的 隔离性Isolation 事务的隔离性要求事务之间是彼此独立的隔离的及一个事务的执行不可以被其他事务干扰 持久性Durability 事务的持续性也称为持久性是指一个事务一旦提交它对数据库的改变将是永久性的因为数据刷进了物理磁盘了其他操作将不会对它产生任何影响 相关SQL关键字start transaction; rollback; commit; savapoint; 相关重要概念脏读、幻读、不可重复读、MVCC多版本控制 ORM中如何使用事务 djangoORM中提供了至少三种开启事务的方式 方式一全局开启事务 配置文件数据库DATABASE相关添加键值对 全局有效ATOMIC_REQUESTS:True每次请求所涉及到的ORM操作同属于一个事务如果过程中报错了就会往回滚方式二装饰器 局部有效 from django.db import transaction # 引入事务模块transaction.atomic # 原子装饰器def index():passeg:from django.db import transactiontransaction.atomicdef index():model.book.objects.create(title简爱price345,publish_id1)hhshhsldlllds # 报错就会过滚return HttpResponse(添加成功)return 123 #在事务里面这也算成功​ 装饰器针对的是视图函数当视图函数需要设计ORM操作如果函数从上往下执行遇到报错会自动回滚到视图函数开始的状态。方式三with 上下文管理 局部有效 from django.db import transactiondef reg():with transaction.atomic():pass # 这下面看作是同一个事务处理遇到报错就会回滚ORM字段类型 名称含义AutoField()Int自增列 必须填入参数 primary_keyTrue当model中如果没有自增列 则自动会创建一个列名为id的列CharField()字符类型 必须提供max_length参数 max_length表示字符长度IntegerField()一个整数类型 范围在 -2147483648 to 2147483647(一般不用它来存手机号(位数也不够) 直接用字符串存)BigIntegerField()长整型(有符号的) -9223372036854775808 9223372036854775807DateField()日期字段 日期格式 YYYY-MM-DD 相当于Python中的datetime.date()实例DateTimeField()日期时间字段 格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] 相当于Python中datetime.datetime()实例DecimalField()10进制小数参数 max_digits 小数总长度decimal_places小数位长度EmailField()字符串类型 Django Admin以及ModelForm中提供验证机制BooleanField()布尔值类型 传布尔值存数字0或1TextField()文本类型 存储大段文本FileField()字符串 路径保存在数据库 文件上传到指定目录参数 upload_to 上传文件的保存路径storage None 存储组件 默认django.core.files.storage.FileSystemStorageForeignKey()外键类型在ORM中用来表示外键关联关系 一般把ForeignKey字段设置在 一对多’中’多’的一方ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系OneToOneField()一对一字段 通常一对一字段用来扩展已有字段通俗的说就是一个人的所有信息不是放在一张表里面的简单的信息一张表隐私的信息另一张表之间通过一对一外键关联ManyToManyField()简单来说就是在多对多表关系并且这一张多对多的关系表是有Django自动帮你建的情况下 下面的方法才可使用create add set remove clear 需要说明的是这些ORM字段并非与SQL字段一一对应有些是封装了一些逻辑功能在字段的创建、存储过程中。 常用字段与不常用字段类型 AutoField(Field) - int自增列必须填入参数 primary_keyTrueBigAutoField(AutoField) - bigint自增列必须填入参数 primary_keyTrue注当model中如果没有自增列则自动会创建一个列名为id的列 from django.db import modelsclass UserInfo(models.Model): # 自动创建一个列名为id的且为自增的整数列 username models.CharField(max_length32)class Group(models.Model): # 自定义自增列 nid models.AutoField(primary_keyTrue) name models.CharField(max_length32)SmallIntegerField(IntegerField): - 小整数 -32768 32767PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) - 正小整数 0 32767 IntegerField(Field) - 整数列(有符号的) -2147483648 2147483647PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) - 正整数 0 2147483647BigIntegerField(IntegerField): - 长整型(有符号的) -9223372036854775808 9223372036854775807BooleanField(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开启此功能需要protocolbothURLField(CharField) - 字符串类型Django Admin以及ModelForm中提供验证 URLSlugField(CharField) - 字符串类型Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符减号CommaSeparatedIntegerField(CharField) - 字符串类型格式必须为逗号分割的数字UUIDField(Field) - 字符串类型Django Admin以及ModelForm中提供对UUID格式的验证FilePathField(Field) - 字符串Django Admin以及ModelForm中提供读取文件夹下文件的功能 - 参数 path, 文件夹路径 matchNone, 正则匹配 recursiveFalse, 递归下面的文件夹 allow_filesTrue, 允许文件 allow_foldersFalse, 允许文件夹FileField(Field) - 字符串路径保存在数据库文件上传到指定目录 - 参数 upload_to 上传文件的保存路径 storage None 存储组件默认django.core.files.storage.FileSystemStorageImageField(FileField) - 字符串路径保存在数据库文件上传到指定目录 - 参数 upload_to 上传文件的保存路径 storage None 存储组件默认django.core.files.storage.FileSystemStorage width_fieldNone, 上传图片的高度保存的数据库字段名字符串 height_fieldNone 上传图片的宽度保存的数据库字段名字符串DateTimeField(DateField) - 日期时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]DateField(DateTimeCheckMixin, Field) - 日期格式 YYYY-MM-DDTimeField(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),ORM还支持用户自定义字段类型 class FixedCharField(models.Field): 类名随便取自定义的char类型的字段类def __init__(self, max_length, *args, **kwargs):self.max_length max_lengthsuper(FixedCharField, self).__init__(max_lengthmax_length, *args, **kwargs)回调之前的init方法def db_type(self, connection):限定生成数据库表的字段类型为char长度为max_length指定的值return char(%s) % self.max_lengthclass Class(models.Model):id models.AutoField(primary_keyTrue)title models.CharField(max_length25)# 使用自定义的char类型的字段cname FixedCharField(max_length25)ORM字段参数 任意字段都可以设置的参数 名称含义null用于表示某个字段可以为空。设置方式null Trueunique用于表示该字段值在此表中必须是唯一的建立唯一索引设置方式unique Truedb_index将该字段设置为索引设置方式db_index Truedefault为该字段的默认值设置方式default ‘默认值’db_column在数据库中的字段名称默认和变量同名设置方式db_column‘字段名’primary_key设置字段为主键设置方式primary_key True。通常id字段为主键且唯一主键 日期字段参数 名称含义unique_for_date日期必须唯一unique_for_month月份必须唯一unique_for_year年份必须唯一auto_now_add增加记录时的时间auto_now更新当前记录的时间 用于Admin后台管理参数 名称含义verbose_nameAdmin中显示的字段名称blankAdmin中是否允许用户输入为空editableAdmin中是否可以编辑help_textAdmin中该字段的提示信息choicesAdmin中显示选择框的内容用不变动的数据放在内存中从而避免跨表操作设置方式choice((1,‘男’),(2,‘女’),(0,‘未知’)) choices 当某个字段的可能性能够被列举完全的情况下使用eg性别、学历、工作状态....模型层数据class User(models.Model):name models.CharField(max_length32)info models.CharField(max_length32)# 先写一个映射关系gender_choices ((1,男),(2,女),(3,其他),)字段存储的范围还是取决于数据类型的字段gender models.SmallIntegerField(choicesgender_choices,nullTrue)tests.py数据User_obj models.User.objects.filter(pk1).first() # 拿到一个对象User_obj1 models.User.objects.filter(pk4).first() # 拿到一个对象print(User_obj.gender) # 1 直接点现实存储的真实数据# 如果你存储的数据没有在映射范围内就原样输出如果有就显示对应的关系对应的数据print(User_obj1.gender) # 4# get_字段名_display()print(User_obj.get_gender_display()) # 男 通过这个方法拿显示转义后的选项print(User_obj1.get_gender_display()) # 4其他参数 名称含义max_length最大长度verboses_name别名max_digits数字中允许的最大的数字位数decimal_places数字的小数位数uniqueTrue如果设置为uniqueTrue 则该字段在此表中必须是唯一的 关系字段 表之间的关系由一对一、一对多、多对多来确定的 ForeignKey外键 通过外键来绑定各个表字段之间的关系 to关联哪张表、设置方式to ‘关联表名’ to_field关联表的哪个字段默认关联主键 related_name反向查询时使用的字段名用于代替原来反向查询的表名_set related_query_name反向查询操作时 使用的连接前缀用于代替表名。相当于给表设置了一个别名 on_delete参数设置的值 models.CASCADE删除关联数据与之关联也删除 models.DO_NOTHING删除关联数据引发错误IntegrityError models.PROTECT删除关联数据引发错误ProtectedError models.SET_NULL删除关联数据搭配null True使用使之关联的值为null models.SET_DEFAULT删除关联数据与之关联的值设置为默认值前提FK字段需要设置默认值 models.SET删除关联数据设置为一个传递给SET()的值或者一个回调函数的返回值注意大小写 db_constraint保留跨表查询的方式但是在table之间不建立外键关联但是在Django内可以有一个关联状态可以在admin里面看到一般都设置为 False减少过多的约束。此时on_delete参数需要设置为models.SET_NULL、blankTrue、nullTrue允许字段为空这样即使关联的外键数据被删除了也只会将字段设置为null。 OneToOneField与ForeignKey的区别 OneToOneField用于一对一关系的表之间进行关联。 根据Django官方文档介绍 A one-to-one relationship. Conceptually, this is similar to a ForeignKey with uniqueTrue, but the “reverse” side of the relation will directly return a single object. OneToOneField与ForeignKey加上uniqueTrue效果基本一样但是用OneToOneField反向关联会直接返回对象。 相反地使用ForeignKey, 反向关联后会返回QuerySet。 例如Book表通过ForenignKey与Publish表建立了外键 obj models.Publish.objects.filter(pk1).first()print(obj.book_set.all()) # 通过ForenignKey进行关联所以反向查询必须要加表名小写_set.all()执行结果拿到的是一个QuerySet对象QuerySet [Book: Book object (1), Book: Book object (2)]Author表通过OneToOneField与AuthorDeatil表建立了外键 obj models.AuthorDeatil.objects.filter(pk1).first()print(obj.author) # 通过OneToOneField进行关联的反向查询不需要_set.all()执行结果Author object (1)多对多关系建立的方式 两张表之间多对多的关系通常需要借助第三张表来存储这样也更利于我们查询。而第三张表的建立有三种方式 第一种自动创建常用但是创建出来的第三张表没有其它字段只存有这两张表的主键相互对应关系第二种半手动创建比较常用第三张表我们可以建立其它字段但也不影响两张表的关联第三种完全手动建立第三张表。 第一种方式通过ORM自带的ManyToManyField自动创建第三张表 class Book(models.Model):title models.CharField(max_length32, verbose_name书名)class Author(models.Model):name models.CharField(max_length32, verbose_name作者姓名)books models.ManyToManyField(toBook, related_nameauthors)# 每次可以将Author表与Book表对应关系的主键值存储到第三张表这种建立第三张表具备多个多对多关系操作API author_obj.books.add()括号内填写与作者关联的书籍对象 或者 书籍的主键值 author_obj.books.set()清空该作者原来关联的书籍传入一个可迭代对象里面可以包含一个或多个书籍对象 或者 书籍主键值 author_obj.books.clear()清空该作者关联的书籍 author_obj.books.remove()移除该作者关联的某个书籍 第二种方式自己创建第三张表并通过ManyToManyField指定关联 class Book(models.Model):title models.CharField(max_length32, verbose_name书名)class Author(models.Model):name models.CharField(max_length32, verbose_name作者姓名)books models.ManyToManyField(toBook, throughAuthor2Book, through_fields(author, book))# through_fields 元组的第一个值是ManyToManyField所在的表去中间表通过那个字段就写在第一个位置。我们要通过author字段去中间表因为authorclass Author2Book(models.Model):author models.ForeignKey(toAuthor)book models.ForeignKey(toBook)through指定我们手动创建的中间表 through_fields指定关联字段设置方式通过元组值也就是关联第三张表的哪几个字段注意先后顺序如果book写在前面则表示我们从Author表到中间表要通过book字段那么就会乱套了 第三种方式自己创建第三张表分别通过外键关联书和作者 class Book1(models.Model):title models.CharField(max_length32, verbose_name书名)class Author1(models.Model):name models.CharField(max_length32, verbose_name作者姓名)class Author2Book1(models.Model):author models.ForeignKey(toAuthor)book models.ForeignKey(toBook)这种方式创建的多对多关系很多API操作都用不了需要手动指定如果要跨表查询将不能通过obj.表名小写或者obj.表名小写_set.all()而是每次都要通过中间表来实现。 ORM中执行SQL语句 在Django的ORM中我们也是可以使用原生SQL来进行操作的其实我们并不能完全依赖于ORM框架来提供给我们操作数据库的便利因为ORM在很多语言中使用形式都会有些不同而SQL语句则是不变的。 实例我们不需要管是基于什么对象来执行SQL语句查出什么字段就可以直接使用 res models.Author.objects.raw(select * from app01_book where id 1)for book in res:print(book.name,book.price,book.publish_time)执行结果:Python爬虫从入门到入狱 666.5 2023-11-24MySQL从入门到删库跑路 880.0 2023-10-24总结执行原生sql跟对象类型无关了查出什么字段可以直接使用该字段。 ps但是基于的不同对象执行SQL语句得到的结果也会是不同的有些字段数据还是用不了 Meta元信息 Meta是Django模型类里面的一个内部类它用于定义一些Django模型类的行为特性。 定义方式class Author(models.Model):class Meta:pass通常在里面定义变量来代表选项而可用的选项大致包含以下几类 1、db_table 自定义表名通常表名都是由Django帮助我们创建的且是由项目_类名组合的 2、index_together 为多个字段建立联合索引设置方式index_together (‘name’,‘age’) 3、unique_together 当需要通过两个字段保持模型唯一性时使用假设有一个 User 类我们希望 User 的 username 和 email 两个属性的组合必须是唯一的那么需要设置为 unique_together ((username, email),)当某个一行记录usernamejack、email123qq.com那么其它行就不能同时这两个字段值都设置的和那一行一样。 unique_together 的值是一个元组的元组。为了方便起见处理单一字段的集合时unique_together 可以是一维的元组 unique_together (driver, restaurant)这样就确保了driver与restaurant字段值是唯一的 4、ordering 根据哪个字段排序设置方式ordering (‘id’,) 可配置参数 属性描述db_table ‘xxx’修改表名为xxxordering ‘xxx’ 按照指定字段xxx排序verbose_name ‘xxx’给模型类指定一个直观可读的信息xxxverbose_name_plural verbose_name设置verbose_name的复数abstract True设置模型类为一个基类不会生成为表只作为继承使用permissions ((‘定义好的权限’, ‘权限说明’),)给数据库的表设置额外的权限managed False是否按照django既定的规则来管理模型类unique_together (‘address’, ‘note’)联合唯一键约束app_label ‘xxx’定义模型类属于哪一个应用db_tablespace定义数据库表空间的名字
http://wiki.neutronadmin.com/news/176437/

相关文章:

  • 公众号里的电影网站怎么做的要怎么推广网站
  • 资源网站不好找了wordpress的模板是什么
  • 免费做微商代理网站优化 月付费
  • 十堰建设网站首页聊天app搭建
  • 网站设计合同模板网站内容页收录
  • 搭建网站后的网址罗湖区做网站的公司
  • 做网站需要几万块吗上海公司名称查询网
  • 网站设计制作哪家好百度搜索智能精选
  • 114做网站电子邮箱号大全免费
  • 有做公司网站官方网站营销
  • 如何用dw做网站首页湘潭城乡建设发展集团网站
  • 建一个电影网站多大 数据库企业网站建设中期报告模板
  • 制作公司网站怎样收费网站开发方向c语言
  • 网站建设新手教程视频教程wordpress 升级 ftp
  • 南海网站建设公司测量为什么要建站
  • 怎样做视频直播网站网站推广公司 sit
  • 做网站例子图片描述上海阳性增多
  • 网站描述怎么修改吗成都哪里做网站备案
  • 如何做vip视频网站乐潍清网站额建设
  • 北京网站建设第一品牌怎么在建设部网站查注册造价师
  • 企业网站重要性贵州省建设厅网站多少
  • 瀑布流响应式网站模板网站开发如何引用函数
  • 石家庄做手机网站建设网站微信认证费用多少钱
  • 网站设计流程是网站设计页面如何做居中
  • 郑州公司网站建设涉县网站
  • 网站关键词方案网站怎么做微信支付
  • 网站管理员是干什么的上海证券交易所网址
  • 做美食视频的网站广州怎么建设一个网站
  • 网站ipv6改造怎么做 网页代码深圳能源集团股份有限公司
  • 哪个网站的ps元素好wordpress 主题 搜索引擎