提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
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
我们需要安装django和mysqlclient
pip install django
pip install mysqlclient
我们电脑上首先要有数据库才行,这里使用的是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,数据库中有表就说明成功了)
如果你遇到上面的error,请你看看在设置的时候,你的密码是否写对了
如果你遇到这个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()
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也提供了帮助吧