计算机基础知识55

如何开启事务

# 定义:开启一个事务可以包含一些sql语句,这些sql语句要么同时成功,要么都别成功

# 作用:保证了对数据操作的数据安全性

# ACID特性:原子性、一致性、隔离性、持久性

  原子性:一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做

  一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态

  隔离性: 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并                   发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

  持久性:指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的

# 事务的三个关键字:start transaction;    commit;    rollback;

# 事务的隔离级别:  数据库很重要------》数据库-----》前端-----》vue、js、冒泡等

        DBA:运维的范畴

# 开启事务:

from django.db import transaction
try:
   with transaction.atomic():
     # SQL1
     # SQL2
     # SQL3            
except Exception as e:
   print(e)       # 记录日志
   transaction.rollback()
"""写在同一个with语句的代码块都是属于同一个事务,要么同时成功,要么同时失败"""

模型层之Fields字段

常见的字段类型:

AutoField:int自增列,必须填入参数 primary_key=True

IntegerField:一个整数类型 , 范围在 -2147483648 to 2147483647。

CharField:字符类型,必须提供max_length参数, max_length表示字符长度。

DateField:日期字段,日期格式  YYYY-MM-DD,相当于Python中的datetime.date()实例。

DateTimeField:日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]

BigAutoField(AutoField):bigint自增列,必须填入参数 primary_key=True

SmallIntegerField(IntegerField): 小整数 -32768 ~ 32767

PositiveSmallIntegerField:正小整数 0 ~ 32767

BigIntegerField: 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807

BooleanField(Field)- 布尔值类型          # True/False  1/0

        name varchar(1024)
        content text;

TextField(Field):文本类型

FileField(Field) :字符串,路径保存在数据库,文件上传到指定目录
参数:     upload_to = ""      上传文件的保存路径
                storage = None      存储组件,默认django.core.files.storage.FileSystemStorage

ImageField(FileField): 字符串,路径保存在数据库,文件上传到指定目录
参数:     upload_to = ""      上传文件的保存路径
                storage = None      存储组件,默认django.core.files.storage.FileSystemStorage

TimeField(DateTimeCheckMixin, Field):  时间格式      HH:MM[:ss[.uuuuuu]]

FloatField(Field):浮点型

DecimalField(Field):10进制小数
 参数:    max_digits,小数总长度
                decimal_places,小数位长度

BinaryField(Field):二进制类型

ORM字段参数

null:用于表示某个字段可以为空。

unique:如果设置为unique=True 则该字段在此表中必须是唯一的 。

db_index:如果db_index=True 则代表着为此字段设置索引。

default:为该字段设置默认值。

DateFieldDateTimeField

auto_now_add:配置auto_now_add=True,创建数据记录时会把当前时间添加到数据库

auto_now:配置上auto_now=True,每次更新数据记录的时候会更新该字段

关系字段

# ForeignKey的参数
1、to:所关联的模型类

2、to_field: 设置要关联表的字段
3、related_name: 反向操作时,使用的字段名,用于代替原反向查询时的’表名_set’

4、db_constraint:是否在数据库中创建外键约束,默认为True

5、on_delete:当删除关联表中的数据时,当前表与其关联的行的行为,值可以是如下
  models.CASCADE:删除关联数据,与之关联也删除

  models.DO_NOTHING:删除关联数据,引发错误IntegrityError

  models.PROTECT:删除关联数据,引发错误ProtectedError

  models.SET_NULL:删除关联数据,与之关联的值设置为null(需要设置为可空)

  models.SET_DEFAULT:删除关联数据,与之关联的值设置为默认值(需要设置默认值)

  models.SET(值) :删除关联数据,与之关联的值设置为指定值       

       models.SET(可执行对象):删除关联数据,与之关联的值设置为可执行对象的返回值

def func():
     return 10

class MyModel(models.Model):
     user = models.ForeignKey(
            to="User",
            to_field="id",
            on_delete=models.SET(func)
       )

# 惰性关系

定义:由于ForeignKey的第一个位置参数是模型类,所以模型Car必须在Manufacturer之后,若想排除先后顺序带来的困扰,即需要创建与尚未定义的模型类的关系,可以将ForeignKey的第一个参数换成字符串形式

from django.db import models

class Car(models.Model):
    manufacturer = models.ForeignKey('Manufacturer', on_delete=models.CASCADE)
    # ...

class Manufacturer(models.Model):
    # ...
    pass

# 根评论
# 子评论:评论评论的评论
        PHP是世界上最好的语言    # 跟
            Python是世界上最好的语言  # 子
                java才是  # 子

计算机基础知识55_第1张图片

计算机基础知识55_第2张图片

# 自关联

        models.Foreign(to='cate')  # 自己关联自己
        models.Foreign(to='self')  # 自己关联自己  自关联

# 自定义字段(了解)

class FixedCharField(models.Field):
    """
    自定义的char类型的字段类
    """
    def __init__(self, max_length, *args, **kwargs):
        self.max_length = max_length
        super(FixedCharField, self).__init__(max_length=max_length, *args, **kwargs)

    def db_type(self, connection):
        """
        限定生成数据库表的字段类型为char,长度为max_length指定的值
        """
        return 'char(%s)' % self.max_length


class Class(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=25)
    # 使用自定义的char类型的字段
    cname = FixedCharField(max_length=25)

图书管理系统逻辑

首页
作者列表:
            添加作者
            修改作者
            删除作者
图书列表:
            添加图书
            修改图书
            删除图书
出版社列表:
            添加出版社
            修改出版社
            删除出版社

今日思维导图:

你可能感兴趣的:(django,python,数据库)