• Django学习日志08


    如何开启事务

    事务的目的:为了保证多个SQL语句执行成功,执行失败,前后保持一致,保证数据安全

    ACID属性:
    A:原子性(Atomicity):指事务是原子的,对事务中的操作要么全部成功,要么全部失败。例如,如果一次购物过程中有两个购买操作,一个操作成功,另一个失败,那么购物过程会被取消,购物车会回滚,以保证原子性不受影响。
    C:一致性(Consistency):指操作后的数据库从一个一致状态转化为另一个一致状态。例如,如果某用户时区变化,数据库中记录的时间也会随之变化,以保证一致性。
    I:隔离性(Isolation):指数据库中正在执行的事务,看不到其他事务的活动。例如,如果两个客户同时向一个银行账户汇款,银行会先锁定该账户并处理一个请求,再锁定该账户并处理另一个请求,以保证隔离性。
    D:持久性(Durability):指一个提交的事务,对数据库中的数据修改是永久有效的。例如,一次交易提交时,数据库中的数据对所有客户端是可见的,以保证持久性。

    start transaction;
    commit;
    rollback;

    开启事务

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

    常见的ORM字段类型

    AutoField
    int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。

    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],相当于Python中的datetime.datetime()实例

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

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

    PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
    - 正小整数 0 ~ 32767

    BigIntegerField(IntegerField):
    - 长整型(有符号的) -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

    为该字段设置默认值。

    DateField和DateTimeField

    auto_now_add

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

    auto_now

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

    关系字段

    ForeignKey

    to
    设置要关联的表
    to_field
    设置要关联的表的字段

    related_name
    反向操作时,使用的字段名,用于代替原反向查询时的’表名_set’。

    on_delete
    当删除关联表中的数据时,当前表与其关联的行的行为。
    models.CASCADE
    删除关联数据,与之关联也删除

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

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

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

    models.SET_DEFAULT
    删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)

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

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

    OneToOneField(unique):ForeignKey(unqiue=True)
    unique 

    无限极分类

     

     

    自定义字段

    自定义char类型字段

    1. class FixedCharField(models.Field):
    2. """
    3. 自定义的char类型的字段类
    4. """
    5. def __init__(self, max_length, *args, **kwargs):
    6. self.max_length = max_length
    7. super(FixedCharField, self).__init__(max_length=max_length, *args, **kwargs)
    8. def db_type(self, connection):
    9. """
    10. 限定生成数据库表的字段类型为char,长度为max_length指定的值
    11. """
    12. return 'char(%s)' % self.max_length

    图书管理系统

  • 相关阅读:
    ai语音智能电销机器人的运用有哪些,呼叫系统部署
    Golang Gorm 一对多 关联模式 Association + Append 添加关联 Association + Replace
    数据仓库架构之详解Kappa和Lambda
    rust: function
    自动驾驶坐标系与旋转矩阵的确定(位置补偿)
    【CycleISP: Real Image Restoration via Improved Data Synthesis】ISP论文--1(个人笔记,勿喷)
    【JavaScript-27】js的内置对象Date,获取当前时间戳,倒计时案例(附最后)
    网络安全(黑客)自学
    树形结构之父子节点查询
    JWT令牌实现登陆校验
  • 原文地址:https://blog.csdn.net/safvirtu/article/details/134515994