Loading

Django框架之ORM操作

【一】配置数据库

【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()
posted @ 2024-03-25 17:27  HuangQiaoqi  阅读(35)  评论(0编辑  收藏  举报