首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

可重复读事务隔离级别之 django 解读

mysql是公司内使用的主流数据库,默认事务隔离级别是可重复读。...本文尝试结合django解释应用开发中并发访问数据库可能会遇到的可重复读引起的问题,希望能帮助大家在开发过程中有效避免类似问题,如果老版本应用中出现这类问题也可以快速定位。...先看下如下这段代码在django1.3中会有什么问题: class MyData(models.Model): key = models.CharField(primary_key=True,...的记录还不存在,由于mysql默认的事务隔离级别是可重复读,因此在simple_test整个事务期间,都找不到key=6e3247f8-31c5-46d7-a3e9-1c855077ea56的记录,所以...最后,django1.8只是将这种可重复读引起问题的概率降低了很多,如果我们在事务中处理不当,也会引起类似问题,django本文最开始的例子进行稍微调整,在django1.8中运行一样会报错。

1.8K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQLAlchemy学习-6.Column 设置字段一些参数配置

    Enum 枚举类型 DateTime 日期时间类型 Date 传递datetime.date()进去 Time 传递datatime.time() 针对字段的一些参数设置 参数 说明 primary_key...是否为主键 autoincrement 是否自动增长 unique 是否唯一 default 默认值 nullable 是否允许为空 onupdate 更新的时候执行的函数 name 该属性在数据库中的字段映射...=False name = Column(String(10), nullable=False) 继续给User 表加一个字段tel 手机号,我们希望手机号不能重复,每个人对应唯一手机号,于是设置 unique...= User(name='yoyo1', tel='10086', age=20) session.add(obj) # 添加到session session.commit() # 提交到数据库 重复添加相同的...tel,会抛出异常: 1062, "Duplicate entry '10086' for key 'tel'" sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError

    3.4K10

    Django学习笔记之ORM字段和字段参数

    按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的。 3....ORM总结 ORM只是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。 但我们不能指望某个工具能一劳永逸地解决所有问题,一些特殊问题还是需要特殊处理的。...id字段是自动添加的,如果你想要指定自定义主键,只需在其中一个字段中指定 primary_key=True 即可。...- bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名为id的列 from django.db...(Field) - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 FilePathField(Field) - 字符串,

    5.1K10

    Django之QuerySet详解

    Django不支持负索引,只能曲线救国。 6. distinct() distinct(*fields) 去除查询结果中重复的行。 默认情况下,QuerySet不会去除重复的行。...当查询跨越多张表的数据时,QuerySet可能得到重复的结果,这时候可以使用distinct()进行去重。...如果model中有一个你手动设置的主键,并且这个值已经存在于数据库中, 调用create()将会失败并且触发IntegrityError因为主键必须是唯一的。...5. bulk_create() bulk_create(objs, batch_size=None) 以高效的方式(通常只有1个查询,无论有多少对象)将提供的对象列表插入到数据库中: >...查找具有唯一性字段(例如primary_key)的模型是否在一个QuerySet中的最高效的方法是: entry = Entry.objects.get(pk=123) if some_queryset.filter

    2.4K20

    Django中ORM介绍和字段及其参数

    按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的。...ORM的劣势 ORM的缺点是会在一定程度上牺牲程序的执行效率。 ORM用多了,造成SQL语句就不会写了,关系数据库相关技能退化。 ORM总结 ORM只是一种工具,工具确实能解决一些重复,简单的劳动。...Django支持MySQL5.5及更高版本。  Django中ORM常用的字段和参数 常用的字段 AutoField:int自增型,必须填入参数 primary_key = True 。...bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名为id的列 from django.db import...(Field) - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 FilePathField(Field) - 字符串,

    2.8K80

    【云+社区年度正文】Django从入门到精通No.2----模型

    ,比如我们学过的flask,里面的sqlalchemy就是这样一个优秀的模块,通过它可以快速和数据库建立通道,从而使得web编程更为高效,本文主要讲解django的模型。...必填参数primary_key=True,则成为数据库的主键,无该字段时,django自动创建,一个model不能有两个该字段。...:字段的名称,如果未指定,则使用属性的名称 db_index:是否可以建立索引 default:默认值 primary_key:是否为主键 unique:否可以建立唯一索引 editable:字段是否可以编辑...- models.CASCADE,删除关联数据,与之关联也删除 - models.DO_NOTHING,删除关联数据,引发错误IntegrityError...django的数据操作,django内置了一款非常到位的系统管理员登陆设计系统,首先我们创建下用户,如下: python manage.py createsuperuser 然后我们按照要求一步步设置参数

    2.1K00

    Django ORM 知识概要

    多对一 models.ForeignKey(Model) 多对多 models.ManyToManyField(Model) 字段类型参数 所有字段都有的参数 db_column='name' primary_key...这个不是SQL标准的一部分,完全由Django处理。 DO_NOTHING:SQL等价物:NO ACTION。...指定模型属于哪个应用(如果在settings里面已经注册过应用的话,就不用写这个字段了) db_tablespace 定义数据库表空间的名字 Django 数据表操作 更改数据表 删除数据库表步骤...删除对应的模型类代码 删除migrationd文件夹下面的模型类 删除Django的migrations表中对应的记录 删除数据库表 导入数据 Django shell 导入数据 引入模型 调用模型对象的...(),bulk_create(),create_or_update() 创建,批量创建,创建或更新 更新对象 update(),update_or_create() 更新,更新或创建 删除对象 delete

    1.8K20

    Django model 层之Models与Mysql数据库小结

    因为,默认的,Django为每个模块设置一个field: id = models.AutoField(primary_key=True) 如果想自己指定一个自定义的主键列,则必须按上述设置,显示指定字段名称...默认200. field对应的默认表单组件为:TextInput UUIDField 存储全球唯一标识(universally unique identifier)。使用Python的UUID类。...但是数据库不会生成UUID,所以推荐使用default,如下: import uuidfrom django.db import models class MyUUIDModel(models.Model...): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) # other fields 参考链接...如果是可调用对象,每次创建对象,都会被调用 help_text 同表单组件一起展示的帮助说明 primary_key 如果设置primary_key=True,那么该field将是model的主键 主键

    2.2K20

    Django-model进阶(中介模型,查询优化,extra,整体插入)

    首次对查询集进行求值 —— 同时发生数据库查询 ——Django 将保存查询的结果到查询集的缓存中并返回明确请求的结果(例如,如果正在迭代查询集,则返回下一个结果)。...例如,重复获取查询集对象中一个特定的索引将每次都查询数据库: 1 2 3 >>> queryset = Entry.objects.all() >>> print queryset[5] # Queries...所以使 #用iterator()的时候要当心,确保你的代码在操作一个大的queryset时没有重复执行查询。...也可以通过depth参数指定递归的深度,Django会自动缓存指定深度内所有的字段。如果要访问指定深度外的字段,Django会再次进行SQL查询。...也接受无参数的调用,Django会尽可能深的递归查询所有的字段。但注意有Django递归的限制和性能的浪费。 Django >= 1.7,链式调用的select_related相当于使用可变长参数。

    1.6K70

    Django中自定义带有前后缀的递增主键

    最近项目中遇到一个需求,在Django的model中主键要带有前缀的递增类型主键,比如:exp-1, exp-2…,类似.这样,而且在所有的model中,主键里面递增的数据要唯一,不能有重复。...我采用的方法其实也很简单: 创建一个单独的model,里面只有一个models.AutoField类型的字段,可以确保主键中递增的数字是全局唯一的 在实际业务model中定义一个models.CharFiled...类型的主键 修改save方法,为业务模型的主键加上前缀 下面是示例代码,可以参考 from django.db import models class AutoIncrementFields(models.Model...):     """     provide a unique ID for all models of code sign     """     id = models.AutoField(primary_key...class A(models.Model): """ example """ case_id = models.CharField(max_length=128, primary_key

    11510

    07.Django学习之model进阶

    例如,重复获取查询集对象中一个特定的索引将每次都查询数据库: >>> queryset = Entry.objects.all() >>> print queryset[5] # Queries the...所以使 #用iterator()的时候要当心,确保你的代码在操作一个大的queryset时没有重复执行查询。...也可以通过depth参数指定递归的深度,Django会自动缓存指定深度内所有的字段。如果要访问指定深度外的字段,Django会再次进行SQL查询。...也接受无参数的调用,Django会尽可能深的递归查询所有的字段。但注意有Django递归的限制和性能的浪费。 Django >= 1.7,链式调用的select_related相当于使用可变长参数。...           .objects.extra(where=['nid in (1,3) OR title like "py%" ','nid>2']) 回到顶部 整体插入 创建对象时,尽可能使用bulk_create

    2K30

    【愚公系列】2022年01月 Python教学课程 40-Django框架之模型属性详解

    2) 关于主键 django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。...默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。 3) 属性命名限制 不能是python的保留关键字。 不允许使用连续的下划线,这是由django的查询方式决定的。...默认值是False db_column 字段的名称,如果未指定,则使用属性的名称 db_index 若值为True, 则在表中会为此字段创建索引,默认值是False default 默认 primary_key...,blank是表单验证范畴的 6) 外键 在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models中包含了可选常量: CASCADE...允许为null时可用 SET_DEFAULT设置为默认值,仅在该字段设置了默认值时可用 SET()设置为特定值或者调用特定方法 DO_NOTHING不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError

    1.4K20
    领券