Django数据库——ORM模型

ORM模型介绍

随着项目越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了:

  1. SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长。会出现很多相近的SQL语句。
  2. 很多SQL语句是在业务逻辑中拼出来的,如果有数据库需要更改,就要去修改这些逻辑,这会很容易漏掉对某些SQL语句的修改。
  3. 写SQL时容易忽略web安全问题,给未来造成隐患。SQL注入。

ORM,全称Object Relational Mapping,中文叫做对象关系映射,通过ORM我们可以通过类的方式去操作数据库,而不用再写原生的SQL语句。通过把表映射成类,把行作实例,把字段作为属性,ORM在执行对象操作的时候最终还是会把对应的操作转换为数据库原生语句。

 

创建ORM模型:

一、新建一个名为“orm_intro”的数据库

二、改变setting.py的DATABASES

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'orm_intro',
        'USER':'root',
        'PASSWORD':'root',
        'HOST':'127.0.0.1',
        'PORT':'3306'
    }
}

三、创建一个app

查看发现有一个models.py,所有和book有关的模型,都放在models.py中

四、实现orm模型

from django.db import models

# Create your models here.
# 如果要将一个普通的类变成一个可以映射到数据库中的ORM模型
# 那么必须要将父类设置为models.Model或者其他的子类
class Book(models.Model):
    # 1.id:int类型,是自增长的,主键
    id = models.AutoField(primary_key=True)
    # 2.name:varchar(100),图书的名字,不能为空
    name = models.CharField(max_length=100,null=False)
    # 3.author:varchar(100),图书的作者
    author = models.CharField(max_length=100,null=False)
    # 4.price:float,图书的价格
    price = models.FloatField(null=False,default=0)

五、映射模型到数据库中

将这个app添加到settings.pyINSTALLED_APP中。

                    

在命令行终端,进入到项目所在的路径,然后执行命令python manage.py makemigrations生成迁移脚本文件。

同样在命令行中,执行命令python manage.py migrate来将迁移脚本文件映射到数据库中。

 

ORM模型的增删改查操作

这时查看数据库:

我们先在views.py定义一个index

def index(request):
    pass

再去urls.py中做映射

from django.urls import path
from book import views

urlpatterns = [
    path('', views.index),
]

添加数据

from .models import Book
from django.http import HttpResponse

# Create your views here.
def index(request):
    # 1.使用ORM添加一条数据到数据库中
    #book = Book(name='三国演义',author='罗贯中',price=200)
    book = Book(name='西游记',author='吴承恩',price=100)
    book.save()
    return HttpResponse('图书添加成功!')

查询数据

# 2.查询
    # 2.1根据主键进行查找
    # primary key
    book = Book.objects.get(pk=1)
    print(book)

    return HttpResponse('图书添加成功!')

返回的是个object对象,需要在models里面定义一个返回格式函数

def __str__(self):
    # <Book:(name,author,price)>
    return "<Book:({name},{author},{price})>".format(name=self.name,author=self.author,price=self.price)

# 2.2根据其他条件进行查找
    books = Book.objects.filter(name='西游记')
    print(books)

删除数据

# 3.删除数据
    book = Book.objects.get(pk=1)
    book.delete()
    return HttpResponse('图书添加成功!')

修改数据

# 4.修改数据
    book = Book.objects.get(pk=2)
    book.price = 300
    book.save()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个流行的高级Python Web框架,它提供了很多内置的功能,包括一个强大的ORM(对象关系映射)系统和用于快速搭建应用的能力。如果要在Django中创建一个通知(Notification)应用程序,通常会涉及以下几个步骤: 1. **模型设计**:首先,你需要定义一个`Notification`模型,包含基本的信息如标题、内容、发送者和接收者等。可能还会有一个状态字段(如已读/未读)。 ```python from django.db import models class Notification(models.Model): title = models.CharField(max_length=200) content = models.TextField() sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sent_notifications') recipient = models.ForeignKey(User, on_delete=models.CASCADE, related_name='received_notifications') is_read = models.BooleanField(default=False) ``` 2. **视图处理**:对于用户接收和管理通知,你可以创建视图函数来显示通知列表、标记为已读、删除通知等。例如,展示通知可能涉及到从数据库获取用户的通知并分页展示。 3. **模板渲染**:创建HTML模板,比如`notifications.html`,用于显示通知详情或通知列表。 4. **信号和任务**:如果需要异步处理(比如通过邮件、推送通知等),可以使用Django的信号系统结合Celery或其他任务队列工具。 5. **URL配置**:在urls.py文件中设置路由,将用户访问通知的URL映射到相应的视图函数。 6. **权限管理**:为了保护用户的隐私,可能需要对哪些用户可以看到特定通知进行权限控制。 完成以上步骤后,用户就可以在Django网站上看到和管理他们的通知了。如果你有更具体的问题,比如如何实现某种功能或者遇到技术难题,欢迎提问:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值