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

Django+Vue全栈开发项目入门(三)

Django操作数据库

在Django中,操作数据库主要通过Django的ORM(Object-Relational Mapping,对象关系映射)来实现。ORM允许开发者使用Python代码来操作数据库,而不需要直接编写SQL语句。

定义模型(Models)

首先,你需要在models.py文件中定义你的数据模型。模型是Django ORM的基础,它定义了数据库中的表结构。

from django.db import models  
  
class MyModel(models.Model):  
    name = models.CharField(max_length=100)  
    age = models.IntegerField()  
    # 其他字段...

创建和应用迁移

当你定义了模型之后,你需要创建迁移文件,并将这些迁移应用到数据库中。迁移是Django用来跟踪数据库模式变化的一种方式。


python manage.py makemigrations  
  

python manage.py migrate

创建和保存对象

一旦迁移完成,你就可以在Python代码中创建和保存模型实例了。

# 导入模型  
from .models import MyModel  
  
# 创建对象  
new_object = MyModel(name='John Doe', age=30)  
  
# 保存对象到数据库  
new_object.save()

自定义查询

Django ORM还允许你通过Q对象、F表达式和原生SQL查询来执行更复杂的查询。

query = Q(is_valid=True)
        # 1、获得热门景点
        is_hot = self.request.GET.get('is_hot', None)
        if is_hot:
            query = query & Q(is_hot=True)

在Django中,Q 对象是与数据库查询相关的一个非常重要的工具。它允许你构建复杂的查询条件,这些条件可以包含逻辑运算符如 ANDOR 和 NOT。这对于在单个查询中组合多个过滤条件特别有用。

Q 对象位于 django.db.models 模块下

from django.db.models import Q

使用 Q 对象构建复杂查询

假设你有一个名为 Article 的模型,它有两个字段:title 和 content。如果你想查找标题包含“Django”或内容包含“ORM”的文章

from myapp.models import Article  
from django.db.models import Q  
  
articles = Article.objects.filter(Q(title__icontains='Django') | Q(content__icontains='ORM'))

在这个例子中,Q(title__icontains='Django') 和 Q(content__icontains='ORM') 是两个查询条件,它们通过逻辑运算符 |(OR)组合在一起。

逻辑运算符

& 或 and_:表示 AND 运算。

| 或 or_:表示 OR 运算。

~ 或 not_:表示 NOT 运算。

注意事项

当你在查询中使用 Q 对象时,确保你已经正确导入了 Q

逻辑运算符的优先级与Python中的相同,因此你可能需要使用括号来明确指定运算的优先级。

在构建复杂的查询时,务必注意性能问题。过多的过滤条件或复杂的逻辑运算符可能会导致查询变慢。


http://www.kler.cn/a/373338.html

相关文章:

  • DDRPHY数字IC后端设计实现系列专题之后端设计导入,IO Ring设计
  • 什么是目标检测?
  • 【汇编语言】第一个程序(四)—— 谁在幕后启动程序 : 探讨可执行文件的装载与执行
  • pgsql表分区和表分片设计
  • lego-loam mapOptmization 源码注释(一)
  • 开发中的拓展属性:增强功能与灵活性
  • Java面试经典 150 题.P88. 合并两个有序数组(001)
  • Flink CDC系列之:学习理解standalone模式
  • 商品详情接口的应用场景有那些?API接口介绍
  • Jenkins面试整理-如何安装 Jenkins?
  • 房地产网络安全:主要风险及缓解建议
  • 100种算法【Python版】第23篇——A*算法
  • 【综合算法学习】(第十篇)
  • MySQL Workbench安装教程(Windows)
  • 电力行业 | 等保测评(网络安全等级保护)工作全解
  • mysql 5.7实现组内排序(连续xx天数)
  • LeetCode Hot100 - 子串篇
  • 商场紧急预案管理:SpringBoot实现指南
  • 3. 教你用WebSocket构建一个实时聊天应用
  • Chromium 中chrome.fontSettings扩展接口定义c++
  • django中entity.save(using=)的使用
  • 不再输入单号查快递,批量查快递单号信息的新方法,智能排序快递时效并查找时效相同的单号,一站式物流查询解决方案
  • 微服务篇SpringCloud
  • Mysql报错注入之floor报错详解
  • AI学习指南自然语言处理篇-Transformer模型简介
  • 美团2025校招 广告算法工程师 面经