首页 > 其他分享 >Django框架之ORM操作

Django框架之ORM操作

时间:2024-03-25 17:34:55浏览次数:18  
标签:框架 ## 数据库 Django ORM objects 字段名

【一】配置数据库

【1】默认数据库

  • 在settings.py文件中的DATABASES字典就是用来配置数据库的
  • 默认的数据库是django自带的数据库是sqlite3
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

【2】修改数据库为mysql

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        # 数据库名字
        'NAME': "",
        # 数据库用户名
        "USER": "",
        # 数据库密码
        "PASSWORD": "",
        # 数据库 IP,本地默认是127.0.0.1/localhost
        "HOST": "localhost",
        # 数据库端口
        "PORT": 3306,
        # 数据库编码
        "CHARSET": "utf8mb4",
    }
}

【3】解决修改数据库报错问题

  • 通常我们会修改为其他的数据库
  • 因为sqlite3并不好用
  • 如果修改完数据库之后不做任何其他的操作,启动项目时会发现报错

解决方法1 猴子补丁

  • 在项目下的 __init__ 或者任意的应用名下的 __init__ 文件中书写一下代码
import pymysql

pymysql.install_as_MySQLdb()

解决方法2 安装第三方模块

pip install mysqlclient

【二】ORM介绍

【1】什么是ORM

  • ORM是一种将对象与关系型数据库之间的映射的技术,主要实现了以下三个方面的功能:
    • 数据库中的表映射为Python中的类
    • 数据库中的字段映射为Python中的属性
    • 数据库中的记录映射为Python中的实例
  • ORM的主要优点是可以减少开发人员编写重复的SQL语句的时间和工作量,并且可以减少由于SQL语句的调整和更改所带来的错误。

【2】Django ORM的优点

  • 与其他ORM框架相比,Django ORM拥有以下优点:
  • 简单易用:Django ORM的API非常简单,易于掌握和使用。
  • 丰富的API:Django ORM提供了丰富的API来完成常见的数据库操作,如增删改查等,同时也支持高级查询和聚合查询等操作。
  • 具有良好的扩展性:Django ORM可以与其他第三方库进行无缝集成,如Django REST framework、Django-Oscar等。
  • 自动映射:Django ORM支持自动映射,开发者只需要定义数据库表的结构,就可以自动生成相应的Python类,从而减少开发过程中的重复代码量。

【三】ORM操作之表操作

【1】定义模型表

  • models.py 文件中定义模型表
from django.db import models


# Create your models here.

# 定义模型类 类名默认即表名,但是后面可以自定义表名
class User(models.Model):
    # 定义表字段,当前字段名为 username , 当前字段类型为字符串类型 , 当前字段约束为最多20个字符
    username = models.CharField(max_length=20)
    # 定义表字段,当前字段名为 password , 当前字段类型为字符串类型 , 当前字段约束为最多20个字符
    password = models.CharField(max_length=20)

【2】生成迁移文件

python manage.py makemigrations

【3】同步到数据库

python manage.py migrate

【四】ORM建表常用字段和参数

【1】常用字段

## AutoField
int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列

## IntegerField
一个整数类型,范围在 -2147483648 to 2147483647。(一般不用它来存手机号(位数也不够),直接用字符串存,)

## CharField
字符类型,必须提供max_length参数, max_length表示字符长度。

## DateField
日期字段,日期格式  YYYY-MM-DD,相当于Python中的datetime.date()实例。

## DateTimeField
日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例。

【2】字段参数

## null
null=True 表示某个字段可以为空

## unique
如果设置为unique=True 则该字段在此表中必须是唯一的 。

## db_index
如果db_index=True 则代表着为此字段设置索引。

## default
为该字段设置默认值。

## to
设置要关联的表

## to_field
设置要关联的表的字段

## on_delete=models.CASCADE
级联删除

【五】ORM操作之数据操作

  • 这里我以User模型表为例
## 增加数据
User.objects.create(username=username)

## 查询所有数据
User.objects.all()

## 查询指定数据
User.objects.filter(username=username)

## 去除指定条件的数据
模型表名.objects.exclude(筛选字段名=筛选字段值)

## 修改(方法1)
模型表名.objects.filter(筛选字段名=筛选字段值).update(修改字段名=修改字段值)

## 修改(方法2)
obj = 模型表名.objects.get(筛选字段名=筛选字段值)
obj.修改字段名=修改字段值
obj.save()

## 删除(方法1)
模型表名.objects.filter(筛选字段名=筛选字段值).delete()

## 删除(方法2)
instance_to_delete = MyModel.objects.get(筛选字段名=筛选字段值)
instance_to_delete.delete()

标签:框架,##,数据库,Django,ORM,objects,字段名
From: https://www.cnblogs.com/Hqqqq/p/18094891

相关文章

  • Django框架之requests对象
    【一】requests对象引入【1】提交GET请求前端form表单中action属性,如果不写的话,默认就是向当前路由请求form表单中的method属性,如果不写默认就是GET请求<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title>{%lo......
  • Django框架之视图层
    【一】视图层三板斧HttpResponse非常重要,因为三板斧的三个方法返回的都是HttpResponse对象通过看源码可以发现各种各样的类,最终都是由HttpResponse这个类继承而来的【1】HttpResponseHttpResponse是Django中用于创建HTTP响应的一个类,它可以方便的把一些自定义的文本内容或......
  • Django框架之路由层
    【一】Django的路由系统【1】什么是URL配置URL调度器|Django文档|Django(djangoproject.com)URL配置的本质就是让URL与视图函数之间有对应的关系当在浏览器输入对应的URL,django就能通过URL配置去找对应的视图函数【2】基本格式##Django1.x版本语法fromdjango.co......
  • Django框架之模板层
    【一】模板语法的传取值模板语法需要记两组符号,分别是{{}}和{%%}{{}}通常是与变量相关的{%%}通常是与逻辑相关的【1】传值模板语法可以传递python所有的数据类型,包括函数和类,以及类实例化的对象传递函数的时候,函数需要有返回值,要不然在页面显示的结果就是None模板语法......
  • 【VTKExamples::Points】第十期 NormalEstimation
    很高兴在雪易的CSDN遇见你 VTK技术爱好者QQ:870202403   公众号:VTK忠粉前言本文分享VTK样例NormalEstimation,并解析接口vtkPCANormalEstimation,希望对各位小伙伴有所帮助!感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!你的点赞就是我的动力(^U^)ノ~YO1.Norm......
  • 基于java中的springboot框架实现学生宿舍管理系统的设计与开发演示【附项目源码+论文
    基于springboot实现学生宿舍管理系统的设计与开发演示摘要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对学生宿舍信息管理混乱,出错率高,信息安全性差,劳动强......
  • 基于java中的SpringBoot框架实现企业客户管理系统演示【附项目源码+论文说明】
    基于SpringBoot实现企业客户管理系统演示摘要本论文主要论述了如何使用JAVA语言开发一个企业客户管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述企业客户管理系统的当前背景以及系统开发的目的,后......
  • 基于java中的springboot框架实现学生宿舍管理系统的设计与开发演示【附项目源码+论文
    基于springboot实现学生宿舍管理系统的设计与开发演示摘要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对学生宿舍信息管理混乱,出错率高,信息安全性差,劳动强......
  • 基于java中的SpringBoot框架实现企业客户管理系统演示【附项目源码+论文说明】
    基于SpringBoot实现企业客户管理系统演示摘要本论文主要论述了如何使用JAVA语言开发一个企业客户管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述企业客户管理系统的当前背景以及系统开发的目的,后......
  • 学习人工智能:Attention Is All You Need-3-训练;结果;结论;Transformer模型相当于 E=MC^2
    5训练Training本节描述了我们模型的训练方案。5.1训练数据和批次处理TrainingDataandBatching我们在标准的WMT2014英德数据集上进行了训练,该数据集包含约450万个句子对。句子使用字节对编码[3]进行编码,其共享源-目标词汇表包含约37000个标记。对于英法翻译,我们使用......