Django中ORM的基本使用教程

下面我会详细讲解Django中ORM的基本使用教程和两个示例。

ORM简介

ORM全称是Object-Relational Mapping,即对象关系映射,它是一种程序设计技术,用于实现面向对象程序语言与关系数据库之间的映射。在ORM中,每一个数据表映射为一个类,每一条记录映射为类的一个实例。

在Django中,ORM支持各种关系型数据库,如MySQL、PostgreSQL等。ORM使得与数据库交互变得更加简单和安全。它抽象了数据库的操作,开发者不需要再去写SQL语句进行增、删、改、查操作,可以直接通过ORM的API进行操作。

ORM的基本使用教程

1. 创建模型

ORM是通过面向对象方式操作数据库的,因此首先要定义相关的模型。在Django中,可以通过models模块实现模型的定义。定义模型的示例代码如下:

from django.db import models

class User(models.Model):

    name = models.CharField(max_length=20)
    age = models.IntegerField()
    email = models.EmailField()

上面的代码中,定义了一个User类,它继承自models.Model,表示这个类与数据库中的一个表对应。定义了三个属性:name、age和email,对应表中的三个字段,都是CharField、IntegerField和EmailField三种类型的字段。其中max_length表示最大长度,EmailField表示该字段必须是一个有效的邮箱地址。

2. 数据库迁移

模型定义好之后,需要进行数据库迁移操作。数据库迁移是将模型中定义的字段映射到数据库中的表中,并生成相应的表结构。Django中,可以通过以下命令进行数据库迁移操作:

python manage.py makemigrations
python manage.py migrate

第一条命令用于生成迁移文件,第二条命令用于执行迁移。

3. 增加数据

数据库迁移完成之后,即可进行数据的增、删、改、查操作了。在Django中,可以通过以下方式创建、保存一个新的User对象:

user = User(name='Tom', age=20, email='tom@gmail.com')
user.save()

4. 查询数据

Django提供多种方式查询数据,举个例子:

users = User.objects.all()  # 查询全部User对象
user = User.objects.get(name='Tom')  # 查询name字段为Tom的User对象

5. 更新数据

假设我们想要将name为Tom的User对象的email修改成另一个值:

user = User.objects.get(name='Tom')
user.email = 'new_email@gmail.com'
user.save()

这里,我们先通过get方法查询到了一个name为Tom的User对象,然后将它的email属性修改后保存。

6. 删除数据

最后是删除数据的操作,代码如下:

user = User.objects.get(name='Tom')
user.delete()

这里,我们先通过get方法查询到了一个name为Tom的User对象,然后直接使用delete方法删除该对象。

示例一

假设现在我们要开发一个简单的博客系统,有两个模型:文章Article和作者Author,一个作者可以有多篇文章。模型的定义如下:

class Author(models.Model):

    name = models.CharField(max_length=20)
    email = models.EmailField()

class Article(models.Model):

    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    content = models.TextField()

定义了两个模型类,Author类和Article类。其中,Article类有一个外键字段author,用于关联作者对象。

添加一篇文章和一个作者的示例代码如下:

author = Author(name='Tom', email='tom@gmail.com')
author.save()

article = Article(author=author, title='Django ORM tutorial', content='This is a tutorial about Django ORM.')
article.save()

通过上述代码,我们添加了一篇标题为“Django ORM tutorial”的文章,作者为Tom。

示例二

假设现在我们要开发一个简单的在线商城系统,有两个模型:商品Product和购物车Cart,一件商品可以被加入多个购物车。模型的定义如下:

class Product(models.Model):

    name = models.CharField(max_length=20)
    price = models.FloatField()

class Cart(models.Model):

    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    count = models.PositiveIntegerField()

定义了两个模型类,Product类和Cart类。其中,Cart类有一个外键字段product,用于关联商品对象。

新建一个购物车和往购物车中添加商品的示例代码如下:

product = Product(name='apple', price=5.0)
product.save()

cart = Cart(product=product, count=2)
cart.save()

通过上述代码,我们添加了一个商品,名字为“apple”,价格为5.0元,并将其添加到购物车中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django中ORM的基本使用教程 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django-orm数据库查询语句

    Django-orm数据库查询语句 #### orm查询用法大全 ### 数据库表 class UserInfo(models.Model): ### 主键自增id不用写, 默认会加上 name = models.CharField(max_length=32, null=True) age = models.IntegerField(null=True) …

    Django 2023年4月10日
    00
  • django 操作前端数据

    django 利用json处理前端页面数据,FLASK当中也同样   def create_company(request):if request.user.is_superuser:custom_list = Custom.objects.all()compclass_list = Compclass.objects.all()custom_list = …

    Django 2023年4月12日
    00
  • Django 字段查询谓词表

    Django 字段查询谓词表 谓词 含义 示例 等价SQL语句 exact 精确等于 Comment.objects.filter(id__exact=14) select * from Comment where id=14 iexact 大小写不敏感的等于 Comment.objects.filter(headline__iexact=’I like t…

    Django 2023年4月12日
    00
  • django用户信息扩展

    Django封装了好多东西,拿来用就可以了,帮我们封装类用户的登录认证,用户的表 所以Django自带有用户表,当扩展用户表后一些表就会被替换 用户认证相关的    功能放在django.contrib.auth的一个app当中,在INSTALLED_APPS中可以看到 主要处理用户信息,权限,认证 Django遵循开闭原则 所以不修改源代码,方便框架升级 …

    Django 2023年4月12日
    00
  • Django框架-管理后台项目之分页实现

    一、自定义分页 分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应在数据库表中的起始位置。 1、设定煤业显示的数据条数 2、用户输入页码(第一页,第二页…) 3、根据设定的每页显示条数和当前页码,计算出需要取数据表的起始位置 4、在数据表中根据起始位置取值,页面上输出数据 前面那样会在页面中生成所有的页码,但实际需要是设定指定数量…

    Django 2023年4月13日
    00
  • Django | pycharm 提示 unresolved attribute referene ‘objects’ for class ‘xxxx’

      objects高亮,提示信息为unresolved attribute referene ‘objects’ for class ‘BookInfo’     当前情况是pycharm没有识别到objects,并不会影响程序运行 只需要在BookInfo 模型类中的 字段同一级,加入如下代码,即可 objects = models.Manager()  …

    Django 2023年4月11日
    00
  • 将Python的Django框架与认证系统整合的方法

    将Python的Django框架与认证系统整合的方法是很常见的需求,主要是在网站建设等场景中需要用户注册、登录、注销等功能。下面是将Python的Django框架与认证系统整合的完整攻略。 1.创建Django项目并设置认证系统 首先,我们需要创建一个Django项目,并设置认证系统。可以在终端中执行以下命令来创建Django项目: django-admin…

    Django 2023年5月16日
    00
  • django 上传头像并预览 3选1

    注册页面的头像上传 register.html<!DOCTYPE html> 1 <html lang=”en”> 2 <head> 3 <meta charset=”UTF-8″> 4 <title>Title</title> 5 </head> 6 <body&gt…

    Django 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部