django的orm框架基础使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

ORM全称Object Relational Mapping,即对象关系映射,是在pymysql之上又进行了一层封装,对于数据的操作,我们无需再去编写原生sql,取代代之的是基于面向对象的思想去编写类、对象、调用相应的方法等,ORM会将其转换/映射成原生SQL然后交给pymysql执行.
现在可以使用mysqlclient,mysqldb模块来替代pymysql
本文是在学习银角大王-武沛齐发的视频教程后写的笔记,具体教程,请看下面这个链接
https://www.bilibili.com/video/BV1rT4y1v7uQ/?p=44&spm_id_from=pageDriver&vd_source=990d3b5b184b6b39de1d6b6497619ae1


一、准备工作

1.第三方库的安装

我们需要安装django和mysqlclient

pip install django
pip install mysqlclient 

2.创建一个数据库

我们电脑上首先要有数据库才行,这里使用的是MySQL8.028
这里给个mysql下载链接
https://downloads.mysql.com/archives/installer/
这里给出一个数据库安装的教程
MySQL 8.0保姆级下载、安装及配置教程(我妈看了都能学会)
操作mysql数据库比较方便的可视化工具是navicat,建议下15版本,老版本很早就破解了
这里给个破解教程
这里给个navicat的下载链接
http://www.itmop.com/downinfo/407970.html
这里给个破解软件的下载链接
https://www.golue.com/game/v679383.html
这里给个教程
[防呆破解操作] Navicat Premium 15安装破解教程

注意,有钱还是要支持一下正版软件

下面来创建一个数据库,供我们后续使用

create database gx_day15 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

二、连接数据库

django在默认的情况下,是连接sqlite,我们需要把这个设置给修改一下,让它连接mysql
关于修改这个东西,有耐心的同学可以阅读一下上面注释中的文档。下面说说修改成什么样子
在这里插入图片描述
修改见下面这段代码

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',# 使用MySQL
        'NAME': "gx_day15",# 要连接的数据库叫什么名字
        'USER':'root',# 账号
        'PASSWORD':"",# 密码
        'HOST':"127.0.0.1",# MySQL在哪里,这里我们是在本机上就这样写
        # 或者写localhost
        'POST':3306,# 端口号,mysql的端口默认就是3306
    }
}

经过这样修改,django就可以连接上我们的数据库

三、创建表和修改表的结构

创建一张表以及表的结构

django里面创建表,就是写类

向下面这样写,就是创建了一张表
其中,导入是固定的,class一行的代码除了UserInfo,其他也是固定的
class下面就是表的结构

from django.db import models

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()
"""
create table app01_userinfo(
    id bigint auto_increment primary key ,
    name varchar (32),
    password varchar (64),
    age int  
)
"""

注意,这个时候程序还没有运行,所以数据库里面没有这个表
我们需要运行下面两个命令(对,你没看错,是需要在命令行运行的命令)
注意!!!顺序不能变,必须在manage的路径里运行

python manage.py makemigrations
python manage.py migrate

运行出来后是类似这样的,如果你第一次运行,会长一点
(没有error,warming,数据库中有表就说明成功了)
在这里插入图片描述

关于我遇到的bug进行说明

1.

在这里插入图片描述
如果你遇到上面的error,请你看看在设置的时候,你的密码是否写对了

2.

在这里插入图片描述
如果你遇到这个bug
如果你使用的是anaconda,请确保你在你的虚拟环境里运行上面的命令,就像这样
在这里插入图片描述

如果你的电脑上有多个python,请确保在上面的命令中的python是你跑程序的那个python

如果你已经确定上面都是对的,请确定你的mysqlclient的版本是多少
我们使用的mysqlclient对版本有一定要求,要求在1.40以上,你可以使用下面命令来变更版本

pip uninstall mysqlclient
pip install mysqlclient==1.44

创建多张表

如何创建多张表,想必你也一定知道了,只要多写几个class类就行了,这里不再进行演示了

关于如何删除已经创建好的表的一些结构

这个在django也很简单,只要把你想删除的结构给注释掉就行了,就像下面这样

from django.db import models

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    # age = models.IntegerField()

关于如何给已经创建好的表添加结构

这个也很简单,直接写就行了,这里不做演示,但是要说一个问题,
如果我们要在一个有数据的表中,新添加一个结构,也就是一列,那新添加的表的数据应该是什么?
这里django给了两个选项,见下图
在这里插入图片描述
第一个选项就是说,现在就给它添加一个默认值,
第二选项就是说,先退出,然后自己在代码中添加一个默认值
一般是下面两种选择

age = models.InterField(default=2)# 设置一个默认值
data = models.IntegerField(null=True,blank=True)# 默认为空
# 注意,其他类型的空值不一定这样写,请自行查阅

四、增删改查

注意!!! UserInfo是我们上面创建表时写的类,你用代码时需要改成你创建表时写的类名

UserInfo.objects.create(name="xx",password="111",age="11")
# 这句话就相当于insert语句,请注意,有些字段是否能添加空值,如果不能,这句代码是会报错的
# () 里还有其他写法,知道这种写法就足够了

# 筛选后删除
UserInfo.objects.filter().delete()
# 将整个表的数据给删除
Department.objects.all().delete()

查找数据

1.查全表数据

orm中相当于的代码

select * from 表名;

data_list = UserInfo.objects.all();

注:这个代码会返回一个queryset类型的列表,列表中的每一个元素就是数据库中的一行数据,需要使用orm中特定的方法来取数据。

data_list = UserInfo.objects.all()
for obj in data_list:
	print(obj.id,obj.name,obj.password,obj.age)

对表进行筛选

data_list = UserInfo.objects.filter(id=1)

修改数据

UserInf.objects.filter(id=2).update(age=999)

总结

orm框架总体来说,还是比较好用的。我个人感觉,这个框架最大的好处在于,可以快速连接多种数据库,快速上手,毕竟我接触orm的时间远远小于我学习SQL的时间。可能我学SQL的经验也给我快速上手orm也提供了帮助吧

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值