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

django中实现数据库操作

在Django中,数据库操作通常通过Django的ORM(Object-Relational Mapping)来实现。ORM允许你使用Python类来表示数据库表,并可以使用Python语法来查询和操作数据库。

以下是在Django中实现数据库操作的基本步骤:

一:定义模型
首先,你需要在Django应用中定义模型。模型是数据库表的抽象表示,通常定义在models.py文件中。例如,假设我们有一个名为Person的模型,可以像这样定义:

from django.db import models  
  
class Person(models.Model):  
    name = models.CharField(max_length=100)  
    age = models.IntegerField()

二:运行迁移(Migrations)


在定义了模型后,需要运行迁移以在数据库中创建相应的表。可以通过以下命令来创建和应用迁移:

python manage.py makemigrations  
python manage.py migrate

三:查询数据库
Django的ORM提供了许多方法来查询数据库。以下是一些基本示例:

获取所有记录:

persons = Person.objects.all()

获取特定记录:

person = Person.objects.get(name="John Doe")

过滤记录:

persons = Person.objects.filter(age__gt=30)

要插入新记录,可以创建模型的实例并调用save()方法。例如:

new_person = Person(name="Jane Doe", age=25)  
new_person.save()

要更新记录,可以获取该记录的实例,修改其属性,然后再次调用save()方法。例如:

person = Person.objects.get(name="Jane Doe")  

person.age = 30  

person.save()

要删除记录,可以调用delete()方法。例如:

person = Person.objects.get(name="Jane Doe")  
person.delete()

这些只是Django ORM的一些基本功能。Django还提供了许多高级功能,如复杂查询、聚合、事务管理等。

事物操作例子:

以下是一个使用Django ORM进行数据库事务的简单例子:

 

首先,假设我们有两个模型:BankAccount 和 Transaction。

from django.db import models  

  

class BankAccount(models.Model):  

    account_name = models.CharField(max_length=100)  

    balance = models.DecimalField(max_digits=10, decimal_places=2)  

  

class Transaction(models.Model):  

    from_account = models.ForeignKey(BankAccount, on_delete=models.CASCADE, related_name='transactions_from')  

    to_account = models.ForeignKey(BankAccount, on_delete=models.CASCADE, related_name='transactions_to')  

    amount = models.DecimalField(max_digits=10, decimal_places=2)

现在,我们想要执行一个转账操作,即从一个账户扣款并给另一个账户存款。这个操作需要确保原子性,即如果扣款成功但存款失败,那么扣款操作也应该被撤销。

from django.db import transaction  

from .models import BankAccount, Transaction  

  

def transfer_money(from_account_name, to_account_name, amount):  

    try:  

        # 开始一个新的事务  

        with transaction.atomic():  

            # 获取账户实例  

            from_account = BankAccount.objects.get(account_name=from_account_name)  

            to_account = BankAccount.objects.get(account_name=to_account_name)  

  

            # 检查转账金额是否有效  

            if from_account.balance < amount:  

                raise ValueError("Insufficient balance")  

  

            # 创建转账记录  

            transaction = Transaction(  

                from_account=from_account,  

                to_account=to_account,  

                amount=amount  

            )  

            transaction.save()  

  

            # 更新账户余额  

            from_account.balance -= amount  

            from_account.save()  

  

            to_account.balance += amount  

            to_account.save()  

  

            # 如果一切顺利,事务将在此处提交  

  

    except ValueError as e:  

        # 如果发生错误,事务将在此处回滚  

        print(f"Transaction failed: {e}")  

  

    except Exception as e:  

        # 其他任何异常也会导致事务回滚  

        print(f"An error occurred: {e}")  

  

# 使用示例  

transfer_money("Alice", "Bob", 100)

在上面的代码中,transfer_money 函数使用 transaction.atomic() 上下文管理器来确保转账操作在事务中执行。如果在转账过程中遇到任何错误(例如,账户余额不足或数据库保存失败),那么事务将自动回滚,所有更改都不会保存到数据库中。

为了更深入地了解Django的数据库操作,建议查阅Django官方文档。

 

相关文章:

django中实现数据库操作

在Django中&#xff0c;数据库操作通常通过Django的ORM&#xff08;Object-Relational Mapping&#xff09;来实现。ORM允许你使用Python类来表示数据库表&#xff0c;并可以使用Python语法来查询和操作数据库。 以下是在Django中实现数据库操作的基本步骤&#xff1a; 一&am…...

使用 FFmpeg 将视频转换为 GIF 动画的技巧

使用 FFmpeg 将视频转换为 GIF 动画 FFmpeg 可以将视频转换为 GIF 动画&#xff0c;方法如下&#xff1a; 1. 准备工作 确保您已经安装了 FFmpeg。 熟悉 FFmpeg 的命令行使用。 了解 GIF 动画的基本知识。 2. 基本命令 ffmpeg -i input.mp4 output.gif 3. 参数说明 -i in…...

2024春晚纸牌魔术原理----环形链表的约瑟夫问题

一.题目及剖析 https://www.nowcoder.com/practice/41c399fdb6004b31a6cbb047c641ed8a?tabnote 这道题涉及到数学原理,有一般公式,但我们先不用公式,看看如何用链表模拟出这一过程 二.思路引入 思路很简单,就试创建一个单向循环链表,然后模拟报数,删去对应的节点 三.代码引…...

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核内存管理-静态内存

目录 一、内存管理二、静态内存2.1、静态内存运行机制2.2、静态内存开发流程2.3、静态内存接口2.4、实例2.5、代码分析&#xff08;待续...&#xff09;坚持就有收货 一、内存管理 内存管理模块管理系统的内存资源&#xff0c;它是操作系统的核心模块之一&#xff0c;主要包括…...

什么是vite,如何使用

参考&#xff1a; 主要&#xff1a;由一次业务项目落地 Vite 的经历&#xff0c;我重新理解了 Vite 预构建 vite官方文档 为什么有人说 vite 快&#xff0c;有人却说 vite 慢&#xff1f; 深入理解Vite核心原理 面向未来的前端构建工具-vite 聊一聊 Vite 的预构建和二次预构建 …...

基于大语言模型的AI Agents

代理&#xff08;Agent&#xff09;指能自主感知环境并采取行动实现目标的智能体。基于大语言模型&#xff08;LLM&#xff09;的 AI Agent 利用 LLM 进行记忆检索、决策推理和行动顺序选择等&#xff0c;把Agent的智能程度提升到了新的高度。LLM驱动的Agent具体是怎么做的呢&a…...

23种设计模式之抽象工厂模式

目录 什么是抽象工厂模式 基本结构 基本实现步骤 实现代码&#xff08;有注释&#xff09; 应用场景 简单工厂、工厂方法、抽象工厂的区别 什么是抽象工厂模式 抽象工厂模式也是一种创建型设计模式&#xff0c;提供了一系列相关或相互依赖对象的接口&#xff0c;而无需…...

飞天使-linux操作的一些技巧与知识点9-zabbix6.0 容器之纸飞机告警设置

文章目录 zabbix 告警纸飞机方式webhook 方式 告警设置 zabbix 告警纸飞机方式 第一种方式参考 https://blog.csdn.net/yetugeng/article/details/99682432bash-4.4$ cat telegram.sh #!/bin/bashMSG$1TOKEN"61231432278:AAsdfsdfsdfsdHUxBwPSINc2kfOGhVik" CHAT_I…...

京东组件移动端库的使用 Nut-UI

1.介绍 NutUI NutUI-Vue 组件库&#xff0c;基于 Taro&#xff0c;使用 Vue 技术栈开发小程序应用&#xff0c;开箱即用&#xff0c;帮助研发快速开发用户界面&#xff0c;提升开发效率&#xff0c;改善开发体验。 特性 &#x1f680; 80 高质量组件&#xff0c;覆盖移动端主…...

用Python来实现2024年春晚刘谦魔术

简介 这是新春的第一篇&#xff0c;今天早上睡到了自然醒&#xff0c;打开手机刷视频就被刘谦的魔术所吸引&#xff0c;忍不住用编程去模拟一下这个过程。 首先&#xff0c;声明的一点&#xff0c;大年初一不学习&#xff0c;所以这其中涉及的数学原理约瑟夫环大家可以找找其…...

TestNG基础教程

TestNG基础教程 一、常用断言二、执行顺序三、依赖测试四、参数化测试1、通过dataProvider实现2、通过xml配置&#xff08;这里是直接跑xml&#xff09; 五、testng.xml常用配置方式1、分组维度控制2、类维度配置3、包维度配置 六、TestNG并发测试1、通过注解来实现2、通过xml来…...

###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 一. 两个主要软件的介绍 1.KeiluVision5软件 Keil uVision5是一款集成开发…...

Android 9.0 任务栏中清除掉播放器的进程,状态栏仍有音乐播放器状态问题的解决

1.概述 在9.0的rom定制化开发中,在点击系统自带的播放器以后,播放音乐的时候,在最近任务栏recents列表中,点击全部清除,发现音乐播放器还在播放音乐,导致出现bug,完整的 解决方法,肯定是需要点击全部清除以后,音乐播放器也被杀掉进程,接下来分析下这个移除任务栏流程…...

【笔记】Helm-5 Chart模板指南-13 调是模版

调试模板 调试模板可能很棘手&#xff0c;因为渲染后的模板发送了kubernetes API server&#xff0c;可能会以格式化以外的原因拒绝YAML文件。 以下命令有助于调试&#xff1a; 1、helm lint 是验证chart是否遵循最佳实践的首选工具。 2、helm template --debug在本地测试渲…...

Gateway反向代理配置

前言 一般而言&#xff0c;反向代理都是在Nginx中来实现的&#xff0c;其实Gateway也可以作为反向代理服务&#xff0c;不过一般不会这么做&#xff0c;只不过最近的项目&#xff0c;在通过Nginx反向代理之后&#xff0c;iPhone手机访问接口代理地址会异常&#xff0c;安卓手机…...

HiveSQL——共同使用ip的用户检测问题【自关联问题】

注&#xff1a;参考文章&#xff1a; SQL 之共同使用ip用户检测问题【自关联问题】-HQL面试题48【拼多多面试题】_hive sql 自关联-CSDN博客文章浏览阅读810次。0 问题描述create table log( uid char(10), ip char(15), time timestamp);insert into log valuesinsert into l…...

猫头虎分享已解决Bug ‍ || 修改mongodb3.0副本集用户密码遇到 BeanDefinitionParsingException

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …...

如何将ChatGPT升级到4.0版本?如何充值?

如何将ChatGPT升级到4.0版本&#xff1f; 在人工智能的世界里&#xff0c;每一个升级都可能带来革命性的变革。ChatGPT的4.0版本无疑是当前最炙手可热的话题之一&#xff0c;那么如何进行升级&#xff0c;体验到这一版所带来的全新特性呢&#xff1f;以下是一步一步的指南。 …...

conda 相关命令

创建并激活环境&#xff1a;打开终端&#xff0c;并创建一个新的conda环境&#xff0c;以确保安装的软件与M1芯片兼容。运行以下命令&#xff1a; conda create -n myenv python这将创建一个名为"myenv"的新环境&#xff0c;并安装Python。然后&#xff0c;激活该环境…...

探索现代Web前端开发框架:选择最适合你的工具

在当今快速发展的Web开发领域&#xff0c;前端开发框架的选择显得尤为关键。这些框架可以帮助我们更高效地构建出交互性强、性能卓越的用户界面。本文将带你了解几个当前最受欢迎的Web前端开发框架&#xff0c;并帮助你根据自己的需求选择最合适的工具。 1. React React由Fac…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...