Django框架ORM操作(二)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: Django框架ORM操作(二)

Hello,大家好,我是你们的老朋友景天,上一张我们了解到Django中ORM的基本定义和怎么驱动默认的数据库sqlite3,今天我们来聊一聊怎么驱动连接mysql数据库,以及ORM中的字段详解

Django配置连接mysql

在settings.py文件中配置。

配置DATABASES参数,现在是默认的是sqlite3数据库

连接mysql配置:

先在10.10.0.52上创建个数据库,创建utf8mb4格式的,包含生僻字

配置如下:

DATABASES = {

‘default’: {

‘ENGINE’: ‘django.db.backends.mysql’,

‘NAME’: ‘orm01’,

‘HOST’: ‘10.10.0.52’,

‘PORT’: 3306,

‘USER’: ‘root’,

‘PASSWORD’: ‘Jinghao31357@’

}

}

先把原来连接sqlite的注销了,再配置连接mysql的

键都是大写

现在执行 python manager.py makemigrations,重新生成migrations文件报错

其实我们已经安装了pymysql,但是Django默认使用的还是MysqlDb

如果想用pymysql,需要告诉Django

在项目同名的目录下的__init__.py中指定

import pymysql

#使用pymysql代替mysqldb

pymysql.install_as_MySQLdb()

此时执行,依然报版本过低,

在项目中__init__.py中这个报错原因,python 3.5以上版本不支持这种方式

解决办法一:

import pymysql

pymysql.version_info=(1,4,3,“final”,0) #这里指定报错需要的pymysql版本

#使用pymysql代替mysqldb

pymysql.install_as_MySQLdb()

解决办法二:

MySQLclient目前只支持到python3.4,因此如果使用的更高版本的python,需要修改如下:

D:\softs\python3\Lib\site-packages\django\db\backends\mysql\base.py

把这个判断注释掉就可以了

再次执行migrations,没有变化的原因是因为我们创建的模型类之前通过sqlie已经执行过,migrations文件已经存在

如果想把表创建到新的mysql数据库,只需要migrate就可以

只要换了新的数据库,migrate会重新执行migrations文件

将mysql客户端添加到pycharm

同样的,下载mysql驱动

输入ip端口号,账号密码,数据库,测试连接

查看数据库表结构

也可以Navicat来可视化操作mysql数据库

模型类,通过ORM语句翻译成创建表的语句,连接数据库执行。调的是代码级别的连接数据库方式,用的是pymysql

找数据库生成表

Book模型类生成的表名称为 应用名称_模型类名小写

ORM模型类的字段

查看orm的field对应MySQL的什么字段类型在下面看

在python自带系统原码文件

D:\softs\python3\Lib\site-packages\django\db\backends\mysql\base.py

backends告诉我们Django能连接哪些数据库

ORM字段与数据库实际字段的对应关系:

    "AutoField": "integer AUTO_INCREMENT",
    "BigAutoField": "bigint AUTO_INCREMENT",
    "BinaryField": "longblob",
    "BooleanField": "bool",
    "CharField": "varchar(%(max_length)s)",
    "DateField": "date",
    "DateTimeField": "datetime(6)",
    "DecimalField": "numeric(%(max_digits)s, %(decimal_places)s)",
    "DurationField": "bigint",
    "FileField": "varchar(%(max_length)s)",
    "FilePathField": "varchar(%(max_length)s)",
    "FloatField": "double precision",
    "IntegerField": "integer",
    "BigIntegerField": "bigint",
    "IPAddressField": "char(15)",
    "GenericIPAddressField": "char(39)",
    "JSONField": "json",
    "OneToOneField": "integer",
    "PositiveBigIntegerField": "bigint UNSIGNED",
    "PositiveIntegerField": "integer UNSIGNED",
    "PositiveSmallIntegerField": "smallint UNSIGNED",
    "SlugField": "varchar(%(max_length)s)",
    "SmallAutoField": "smallint AUTO_INCREMENT",
    "SmallIntegerField": "smallint",
    "TextField": "longtext",
    "TimeField": "time(6)",
    "UUIDField": "char(32)",

ORM的牛逼之处在于,数据库迁移方便

比如刚开始公司用mysql数据库,后来公司壮大了,换成了oracle数据库,

使用ORM来迁移数据库,只需要修改数据库连接即可将之前的数据库数据全部导入新的oracle数据库

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
933 173
|
监控 安全 测试技术
Django框架的表单验证和过滤机制是否可以应对复杂的安全场景?
综上所述,Django 框架的表单验证和过滤机制在一定程度上可以应对复杂的安全场景,但需要综合运用多种手段来进一步提升安全性,以适应不断变化的安全挑战。
420 159
|
数据采集 中间件 Python
如何在Django框架中进行输入验证和过滤?
通过综合运用这些方法,可以在 Django 框架中有效地进行输入验证和过滤,提高应用的安全性和数据质量。同时,还可以根据具体的业务需求进一步扩展和定制验证逻辑。
489 158
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
714 67
|
搜索推荐 API 开发者
Django框架和Flask框架的适用场景分别是什么?
总体而言,Django 更适合需要全面功能和大规模开发的场景,而 Flask 则更适合灵活性要求高、小型项目或特定需求的开发。当然,具体的选择还应根据项目的具体情况、团队的技术能力和偏好等因素来综合考虑。在实际应用中,开发者可以根据项目的特点和需求,灵活选择使用这两个框架,或者结合它们的优势来构建更强大的 Web 应用程序。
578 64
|
开发者 数据库管理 Python
Django框架和Flask框架的区别
总体而言,Django 适合需要快速搭建大型应用的开发者,而 Flask 则更适合有特定需求和追求灵活性的开发者。
605 64
|
Python
Django 框架的路由系统
Django 框架的路由系统
366 63
|
安全 前端开发 数据库
Django框架
总的来说,Django 是一个非常优秀的 Web 框架,它为开发者提供了坚实的基础和丰富的功能,使得构建高质量的 Web 应用变得更加容易和高效。无论是初学者还是经验丰富的开发者,都可以从中受益,利用它来实现自己的创意和想法。
372 60