python-django中使用事务以及小坑

django中使用事务

一、导入事务模块

from django.db import transaction

二、对相应的业务进行事务操作

  1. 方式一:为整个函数进行事务操作

    @transaction.atomic
    def mysql_test():
     '''该函数进行一些关于数据库的操作'''
     pass
  2. 方式二:为部分代码进行事务操作
    # 视图函数
    def mysql_test(request):
        try:
         with transaction.atomic():
             # 一系列对数据库的操作
             pass
     except Exception:   # 最好具体的错误类型,捕捉具体的错误
            pass

好了,上面就是关于django中使用事务的方式

不过这里还是得提醒一下,mysql中INNODB存储引擎是支持事务的,MyISAM是不支持的!

所以我们在settings.py文件中,关于mysql数据库,如果项目中需要使用到事务,那么就必须指定INNODB存储引擎。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'root',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'OPTIONS': {
            "init_command": "SET storage_engine=INNODB",
        }
    }
}

如果忽略掉OPTIONS这个键值对的话,django给我们创建的表是MyISAM。这是一个小坑,本人记录一下。

原文地址:https://www.cnblogs.com/zhuchunyu/p/11227130.html

时间: 2024-11-09 16:32:53

python-django中使用事务以及小坑的相关文章

django中数据库事务的处理

今天在django中处理数据库数据时,用到事务,官方文档看不下去,网上查资料,那叫一个大海捞针啊,还找不到自己想要的效果. django中的事务, 依据Django1.6的文档,“Django提供了一种简单的API去控制数据库的事务交易...原子操作用来定义数据库事务的属性. 原子操作允许我们在数据库保证的前提下,创建一堆代码.如果这些代码被成功的执行,所对应的改变也会提交到数据库中.如果有异常发生,那么操作就会回滚.”可以采用装饰器用法或代码块用法,强力推荐代码块,如下. from djang

django中的事务管理

在讲解之前首先来了解一下数据库中的事务. 什么是数据库中的事务? 热心网友回答: (1):事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性. (2):事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束. COMMIT表示提交,即提交事务的所有操作.具体地说就是将事务中所有对数据库的更新写回

Django中MySQL事务的使用

Django中事物的使用 from django.db import transaction @transaction.atomic通过transaction的@transaction.atomic装饰器来开启事务,在视图逻辑涉及数据库操作的地方添加事物保存点,在操作不满足时进行事物回滚,在操作满足是进行事物提交 # 前端传递的参数:地址id(addr_id) 支付方式(pay_method) 用户要购买的商品id字符串(sku_ids) # mysql事务: 一组sql操作,要么都成功,要么都

python django中的orm外键级联删除

今天添加了一个路由表,路由表做外键,然后添加了几个组,路由表为组的外键,当我使用删除功能对路由表进行删除时,竞然将我的组也相当的删除了:尽管这是测试,但放到生产环境中还是会发生意外的:这个问题要解决: 在网上查了一下资料,问题主要是django orm的field字段有关: routemgr = models.ForeignKey('Routemgr',default=1,blank=True,null=True,on_delete=models.SET_NULL) 主要意思就是把Routemg

Python Django 数据库查询优化 事务

一 数据库优化查询 1.惰性查询:orm内的所有语句操作,只有你真正需要数据的时候才会对数据库进行操作,如果只是单单写orm语句不会走数据库.这样的好处是减轻数据库压力. 2.only res = models.Book.objects.only('title') print(res) for r in res: print(r.title) # 只走一次数据库查询 print(r.price) # 当你点击一个不是only括号内指定的字段的时候 不会报错 而是会频繁的走数据库查询 3.defe

在python函数中默认参数的一些坑

一.默认参数 python为了简化函数的调用,提供了默认参数机制: 这样在调用pow函数时,就可以省略最后一个参数不写: 在定义有默认参数的函数时,需要注意以下: 必选参数必须在前面,默认参数在后: 设置何种参数为默认参数?一般来说,将参数值变化小的设置为默认参数. python标准库实践 python内建函数: 函数签名可以看出,使用print('hello python')这样的简单调用的打印语句,实际上传入了许多默认值,默认参数使得函数的调用变得非常简单. 二.出错了的默认参数 引用一个官

关于django中的get_or_create方法的坑

最近在项目中发现了这样的一个坑,那就是我们的需求是不能添加一个相同的对象到数据库中,就通过某些字段的值组合成唯一值到数据库中去查找数据,如果没有找到对象,那就创建一条新的数据库记录,而刚好django又提供了这种方法,那就是get_or_create.可是在测试的时候发现会加入相同的对象. 而解决方法就是:其实我们可以从数据库级别来使这几个字段组合唯一,这样如果有重复的数据就会加不进去. class Meta: unique_together = (("xxx", "xxxx

python django中如何配置mysql参数

在成功安装python-mysql后,开始配置django的mysql连接配置 vi settings.py 修改 DATABASES = {    'default': {        'ENGINE': 'django.db.backends.sqlite3',        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),    }} 为 DATABASES = {    'default':{        'ENGINE':'django.d

React事件中遇到的一个小坑

一个点击按钮数字加1的小程序,我在第一次看书中的这段代码的时候,第一眼我就对this.handleClick = this.handleClick.bind 这句话表示有点疑问,类中handleClick 方法不是定义在原型对象中的嘛,实例对象显示地调用方法this不应该就是指向对象自身吗,再添这句话岂不是多此一举 直到我上手去敲了一遍示例代码,特意把上面这句话删除发现点击按钮的时候报错,undefined没有setState这个属性,这就很奇怪了呀...是不是应该this.handleClic