您的位置:首页 > 教育 > 锐评 > 什么专业学网页设计制作_深圳市官网网站建设_搜狗收录提交入口网址_官方推广平台

什么专业学网页设计制作_深圳市官网网站建设_搜狗收录提交入口网址_官方推广平台

2025/1/7 1:03:14 来源:https://blog.csdn.net/2403_83182682/article/details/144884038  浏览:    关键词:什么专业学网页设计制作_深圳市官网网站建设_搜狗收录提交入口网址_官方推广平台
什么专业学网页设计制作_深圳市官网网站建设_搜狗收录提交入口网址_官方推广平台

阅前先赞,养好习惯!

目录

1、ORM框架介绍

选择建议

2、安装mysqlclient

3、创建数据库

4、修改settings,连接数据库

5、对数据库进行操作

创建表

删除表

添加数据

删除数据

修改(更新)数据:

获取数据


1、ORM框架介绍

        之前讲过MySQL连接pymysql,PyMySQL 是一个纯 Python 实现的 MySQL 客户端库,用于直接与 MySQL 数据库交互。通过 PyMySQL,可以发送原生 SQL 查询语句,并获取查询结果。但是大家也能看到,PyMySQL的一些语句其实和MySQL是差不多的,并且代码比较繁琐,切换数据库也很麻烦,要修改大量代码。

现在来介绍另一种方法:ORM

Django 的 ORM(Object-Relational Mapping)是一种将数据库表和 Python 类关联起来的工具,允许开发者通过操作 Python 对象来与数据库交互,而不需要直接编写 SQL 查询。

两者区别:

特性Django ORMPyMySQL
开发效率高:无需手写 SQL,直接用 Python 操作数据库。低:需要手写 SQL,代码量多,容易出错。
代码可读性高:简洁、结构化,贴近业务逻辑。中:需要理解 SQL 和 Python 代码的混合逻辑。
数据库独立性强:支持多种数据库(MySQL、PostgreSQL、SQLite 等),切换数据库只需更改配置,无需改动代码。弱:依赖 MySQL,切换数据库需要修改大量 SQL。
学习成本低:只需学习 Django 的模型和查询 API。高:需要熟悉 SQL 语法和数据库操作。
性能中:抽象层带来开销,复杂查询可能性能较低。高:直接发送 SQL,性能更高。
功能扩展高:内置丰富功能,如分页、外键、查询优化等。低:需要自己实现复杂功能。
错误处理自动处理,减少手动处理的错误风险。完全依赖开发者,错误处理工作量大。

选择建议

  • 使用 Django ORM

    • 开发 Django 项目时,优先选择 ORM。它能大幅提升开发效率,特别是对于中小型项目。
    • 如果项目大部分操作是增删改查,ORM 是首选。
  • 使用 PyMySQL

    • 如果需要处理复杂的 SQL 查询或高性能场景,可以结合 PyMySQL 使用。例如,在 Django 项目中,使用 ORM 完成大部分逻辑,少数复杂场景下直接用 PyMySQL 或 raw SQL 查询。
    • 非 Django 项目,且对性能要求极高时,选择 PyMySQL。

        ORM是一个框架,可以通过PyMySQL工具来操作MySQL,而在Django开发中,一般使用mysqlclient工具而并非PySQL,有两个原因,一个是Django 官方文档中明确推荐使用 mysqlclient,因为它和 Django 的 ORM 紧密集成,兼容性经过了长期验证;还有就是mysqlclient的性能要好一点。

Orm将数据库基本语句弄得更简单,将简单的语句翻译成数据库原生代码。

2、安装mysqlclient

打开控制台输入:

pip install mysqlclient

安装成功界面:

3、创建数据库

由于mysqlclient无法创建数据库,所以得我们自己创建,详细教程前文有说:

【全栈开发】----Mysql基本配置与使用-CSDN博客

进入到mysql>下,输入:

create database mydata default character set utf8;

并检查mydata是否已被创建

show databases;

4、修改settings,连接数据库

        打开settings文件,这里是默认的连接sqlite3,这也是一种数据库,我们要改成MySQL的,先把这段代码注释。

输入:

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql',  #django连接mysql,还可以连oracle、sqlite3、postgresql等等'NAME': 'mydata',  #数据库名字'USER':'root',  #用户'PASSWORD':'612612',  #密码'HOST':'127.0.0.1',  #主机'PORT':'3306',  #端口}
}

注意!大家的数据库名称和密码可能与我不一样,修改一下即可

5、对数据库进行操作

创建表

在app的models文件中,每新建一个类,就是创建一张表,类需继承models类

class Department(models.Model):title = models.CharField(max_length=32)

例如上面的Department类就是创建了一张表,表中有title行,32位字符型

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

UserInfo类定义了一个长度为32的字符串行name,长度为64的字符串行password,有符号情况下最多十位的整型age行。

类名代替表名,字段名代表列名

上面的UserInfo类其实就相当于MySQL中的:

create table app01_userinfo(id bigint auto_increment primary key,name varchar(32),password varchar(64),age int,
)

运行命令如下:

python manage.py makemigrations
python manage.py migrate

在Pycharm终端依次输入运行即可

注意前提是下载了mysqlclient库,并且app已注册

检查表是否创建成功:

desc app01_userinfo;

注意!!!虽然我们在models中创建的是UserInfo类,但mysqlclient处理后真正的表名是

应用名+_+类(类全小写)

所以此处表名是    app01_userinfo

创建表后还能再添加字段吗?当然是可以的

在类中再添加一个字段,输入:

size = models.IntegerField()

运行后提示:

1、要是选择1的话,点击Enter,会提示让您输入一个默认值,然后那一列都将是那个默认值。

2、要是选2的话,并且没有任何操作,数据库中将不会显示新加的数据。

3、选2后,在源代码中添加默认值,将会出现数据。

size = models.IntegerField(default=2)

也可以将数据设置成空:

size = models.IntegerField(null=True,blank=True)

删除表

删除表很简单,只需要将类注释或者直接删掉,再输入这两行命令刷新即可

python manage.py makemigrations
python manage.py migrate

添加数据

新建一个url,用来测试是否添加数据

def orm(requests):# 测试orm操作表中的数据return HttpResponse("成功")

增加数据命令:

UserInfo.objects.create(name="谭谈",password="1234",age=18)

启动项目,发现数据确实是添加进去了

大家可以自己再多添加几行数据,便于后面的修改与删除

删除数据

删除满足特定条件的数据:

Department.objects.filter(id=2).delete()

确实是删除了

删除全部数据:

这就不演示了,大家可以自己玩玩

UserInfo.objects.all().delete()

修改(更新)数据:

UserInfo.objects.filter(id=1).update(name="有的兄弟")

确实是修改了

获取数据

使用.all()方法获取数据

data_list = UserInfo.objects.all()
print(data_list)

可以先在控制台打印看看

发现拿到的是一个QuerySet对象,包含三个数据,每个数据后面的数字代表ID值

可以通过迭代器和点属性来获取具体的值:

    for data in data_list:print(data.id,data.name,data.password,id.age)

发现确实是被正确获取并打印了:

获取到的QuerySet可以通过索引和其他方法取值,常见的有以下三种,我就不一一介绍了,大家可以自己玩玩:

.first() vs .get() vs [0]

方法返回值异常处理使用场景
.first()第一条记录或 None不抛出异常不确定是否有数据时更安全
.get()符合条件的唯一对象抛出 DoesNotExist 异常确定条件只会返回一条数据时使用
[0]第一条记录或抛出 IndexError抛出 IndexError 异常确定有数据且只需第一条时使用

本次分享就到这儿了

下一篇博客更新用户管理综合案例!!!

感谢您的三连!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com