搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL(四)

上一篇:搭建基于Django的博客系统增加广告轮播图(三)
下一篇:基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五)

Sqlite3数据库迁移到MySQL 数据库

迁移原因

Django 的内置数据库 SQLite3 和外置数据库 MySQL 有一些关键区别,这些区别会影响项目的开发、部署和维护。以下是两者之间的主要区别:

1. 安装与配置

  • SQLite3:
    • 安装: 内置于 Python 中,无需额外安装。
    • 配置: 配置简单,只需在 settings.py 中指定数据库文件路径。
    • 适用场景: 适合小型项目、开发环境和单用户应用。
  • MySQL:
    • 安装: 需要单独安装 MySQL 服务器,并且需要合适的 MySQL 驱动(例如 mysqlclientPyMySQL)。
    • 配置: 需要在 settings.py 中配置数据库主机、端口、用户名和密码。
    • 适用场景: 适合大型项目、生产环境和多用户应用。

2. 性能与扩展性

  • SQLite3:
    • 性能: 对于读操作性能较好,但在大量并发写操作下性能较差。
    • 扩展性: 设计为嵌入式数据库,不适合高并发、复杂查询和大数据集。
  • MySQL:
    • 性能: 适合高并发、多用户环境,支持复杂查询和大数据集。
    • 扩展性: 支持水平和垂直扩展,可以通过集群和分片来提升性能。

3. 数据完整性与事务

  • SQLite3:
    • 数据完整性: 支持基本的数据完整性约束。
    • 事务: 支持事务,但在高并发写操作下可能会出现锁争用问题。
  • MySQL:
    • 数据完整性: 提供更高级的数据完整性约束和外键支持。
    • 事务: 提供强大的事务支持,尤其是使用 InnoDB 存储引擎时。

4. 功能与特性

  • SQLite3:
    • 功能: 提供基础的 SQL 功能,不支持一些高级特性如存储过程、触发器等。
    • 特性: 单个数据库文件,便于移动和备份。
  • MySQL:
    • 功能: 提供全面的 SQL 功能,支持存储过程、触发器、视图等高级特性。
    • 特性: 支持多种存储引擎(如 InnoDB、MyISAM 等),可以根据需求选择。

5. 开发与维护

  • SQLite3:
    • 开发: 易于设置和使用,非常适合快速原型和开发。
    • 维护: 无需运行单独的数据库服务器,维护简单。
  • MySQL:
    • 开发: 需要设置和运行 MySQL 服务器,但提供更丰富的开发特性。
    • 维护: 需要定期维护数据库服务器和数据备份,维护工作量较大。

选择建议

  • SQLite3 适合:
    • 小型项目或单用户应用。
    • 开发和测试环境。
    • 移动应用和嵌入式系统。
  • MySQL 适合:
    • 大型项目和生产环境。
    • 高并发、多用户应用。
    • 需要复杂查询和事务支持的应用。

更换步骤

以下是将 Django 项目从 SQLite 数据库切换到 MySQL 数据库的具体步骤:

1. 安装 MySQL 和相关驱动

首先,你需要确保 MySQL 服务器已经安装并运行。然后,安装 Python MySQL 驱动,例如 mysqlclient

pip install mysqlclient

或者 PyMySQL

pip install PyMySQL

如果使用 PyMySQL,还需要在 Django 项目的 __init__.py 文件中添加以下代码,以确保 Django 使用 PyMySQL 作为 MySQL 驱动:

import pymysqlpymysql.install_as_MySQLdb()

2. 配置 MySQL 数据库

在 Django 项目的 settings.py 文件中,修改 DATABASES 配置为使用 MySQL:

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'your_database_name','USER': 'your_database_user','PASSWORD': 'your_database_password','HOST': 'localhost',  # 或者你的数据库服务器地址'PORT': '3306',       # MySQL 默认端口}
}

3. 创建 MySQL 数据库

在 MySQL 中创建一个新的数据库。例如,通过 MySQL 命令行客户端或任何 MySQL 管理工具(如 phpMyAdmin 或 MySQL Workbench)执行以下命令:

CREATE DATABASE your_database_name CHARACTER SET UTF8;

4. 运行数据库迁移

在 Django 项目的根目录下运行以下命令,以应用数据库迁移并创建相应的数据库表:

python manage.py migrate

5. 创建超级用户

如果这是一个新项目,你可能需要创建一个新的超级用户,以便访问 admin 控制台:

python manage.py createsuperuser

6. 启动开发服务器

最后,启动 Django 开发服务器:

python manage.py runserver

访问 http://127.0.0.1:8000/admin/,使用你创建的超级用户帐户登录,验证 admin 控制台是否正常工作。

完整的 settings.py 示例

假设你的数据库名为 mydatabase,用户名为 myuser,密码为 mypassword

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'mydatabase','USER': 'myuser','PASSWORD': 'mypassword','HOST': 'localhost','PORT': '3306',}
}# 如果使用 PyMySQL 驱动,确保在项目的 __init__.py 文件中添加以下代码
import pymysqlpymysql.install_as_MySQLdb()

注意事项

  1. 数据库迁移:如果你已经在使用 SQLite 数据库,并且有数据需要迁移到 MySQL,可以使用工具如 django-migration 或编写自定义脚本来迁移数据。
  2. 数据库性能:确保 MySQL 服务器的配置和优化,以满足你的项目需求。
  3. 备份和恢复:定期备份 MySQL 数据库,并确保有适当的恢复策略。

通过上述步骤,你可以将 Django 项目从 SQLite 数据库切换到 MySQL 数据库,并继续正常使用 admin 控制台。

插入相关数据

访问http://localhost:8000/,因为没有数据,所有的页面清零。
在这里插入图片描述

重新插入carousel数据。

在这里插入图片描述

重新插入post数据。重新插入user数据。效果如下:

在这里插入图片描述

mysql查看数据库

打开mysql看到表结构如下,看到数据成功插入:

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态规划求多段图的最短路径

一、基本思想 动态规划法将待求解问题分解成若干个相互重叠的子问题,每个子问题相互关联;动态规划法与分治法的区别就在于分治法的子问题相互不关联,而动态规划法的子问题是相互关联的,且有重叠的部分。 二、算法分析 动态规划…

性能优化相关:nginx负载均衡中的动静分离

结合上次博客:正向代理和反向代理 什么是动静分离: 静态资源:包含css文件、图片、js文件、配置文件等 动态资源:脚本处理等 更改/usr/local/nginx/conf下的nginx.conf文件,设置动静目录,添加如下 locatio…

Ubuntu——配置安装服务

目录 一、安装JDK 二、安装IntelliJ IDEA 三、安装Docker-ce 1.环境清理以免有遗留组件 2.安装Docker 3.测试 #检查版本 sudo cat /etc/issue 一、安装JDK Ubuntu提供了一个名为apt的软件包管理工具,通过它可以使用命令行的方式安装、更新和删除软件包。 使用…

Day03 左侧菜单数据绑定

一.左侧菜单数据绑定 1.首先,进行项目结构塔建。按照Prism 框架约定,要使用自动查找绑定功能。即View (视图)中自动查找并绑定到对应的ViewModel(视图模型,处理视图业务逻辑)。就需要在项目中按…

大数据在金融行业的深度应用与未来展望

一、引言 随着信息技术的迅猛发展,大数据已经成为推动金融行业创新的重要力量。从精准营销、个性化服务到风险管理和产品创新,大数据的应用正在不断重塑金融行业的格局。本文将深入探讨大数据在金融行业的深度应用,分析其特征特点、解决方案以及面临的挑战与机遇,并展望其…

LeetCode刷题之HOT100之搜索旋转排序数组

2024/6/2 雨一直下,一个上午都在床上趴着看完了《百年孤独》,撑伞去吃了个饭,又回到了宿舍。打开许久未开的老电脑,准备做题了。《百年孤独》讲了什么,想表达什么,想给读者留下什么,我不知道&am…

无法拒绝!GPT-4o 完美适配安卓手机,畅享丝滑体验

无法拒绝!GPT-4o 完美适配安卓手机,畅享丝滑体验 前言 人工智能的飞速发展,给我们的生活带来了前所未有的便利。作为AI技术的代表之一,GPT凭借其强大的自然语言处理能力,已经成为许多用户日常生活和工作中的得力助手…

超大功率光伏并网逆变器学习(三相) 一

1.超大功率用的IGBT开关频率通常很低,比如6KHz 2.线电压和相电压的关系 相电压 A AB线电压-CA线电压 相电压 B BC线电压-AB线电压 相电压 C CA线电压-BC线电压 3.坐标变换 ABC三相信号通过Clark坐标变换得到αβ两相静止信号,其中α与A相重合,β与α…

基于数据驱动的自适应性小波构造(MATLAB)

以地震领域为例,时频变换能够刻画地震资料的时频特征,进而辅助地质构造解释。在各种时频分析工具中,连续小波变换CWT是描述地震资料时频特征的常用工具。选择合适的基小波是CWT的关键问题。对于不同类型的信号前人有针对性的设计了许多基小波…

TCP/IP(网络编程)

一、网络每一层的作用 *网络接口层和物理层的作用:屏蔽硬件的差异,通过底层的驱动,会提供统一的接口,供网络层使用 *网络层的作用:实现端到端的传输 *传输层:数据应该交给哪一个任…

移植2D物理引擎到LVGL

背景 在LVGL交流群,有网友提出想要移植物理引擎到LVGL,遂有了本文。阅读本文需要对IDF和LVGL有所了解 过程 2D物理引擎有很多,经过一番调研选择了Chipmunk2D 下载源码 此处省略一万字,Github访问可能会有些慢 添加文件 将…

前端3剑客(第1篇)-初识HTML

100编程书屋_孔夫子旧书网 当今主流的技术中,可以分为前端和后端两个门类。 前端:简单的理解就是和用户打交道 后端:主要用于组织数据 而前端就Web开发方向来说, 分为三门语言, HTML、CSS、JavaScript 语言作用HT…

【Mysql语句优化---Explain使用以及相关属性含义】

Explain使用以及相关属性含义 一.explain中的列 接下来我们将展示 explain 中每个列的信息。 1. id列 id列的编号是 select 的序列号,有几个 select 就有几个id,并且id的顺序是按 select 出现的顺序增长的。 id列越大执行优先级越高,id相…

罗德里格斯旋转公式证明-简洁

罗德里格斯旋转公式证明。 设旋转向量为 ( n , θ ) (n, \theta) (n,θ),设其对应的旋转矩阵为 R R R, 如何证明? R c o s θ I n ∧ s i n θ ( 1 − c o s θ ) n n T Rcos\theta I n^{\wedge}sin\theta(1-cos\theta)nn^{T} RcosθI…

RDD与Java实战:学生列表,先按性别降序,再按年龄降序排列

文章目录 Scala RDD 实现Java 实现实战总结 在本实战任务中,我们的目标是对学生列表进行排序,排序规则是先按性别降序排列,再按年龄降序排列。我们提供了两种实现方式:使用Scala的RDD(弹性分布式数据集)和…

Python 二叉数的实例化及遍历

首先创建一个这样的二叉树,作为我们今天的实例。实例代码在下方。 #创建1个树类型 class TreeNode:def __init__(self,val,leftNone,rightNone):self.valvalself.leftleftself.rightright #实例化类 node1TreeNode(5) node2TreeNode(6) node3TreeNode(7) node4Tre…

Mybatis项目创建 + 规范

文章目录 一、相关概念Mybatis1.1 什么是Mybatis1.1 如何实现简化JDBC 二、如何创建 Mybatis 项目2.1 创建SpringBoot项目 加载依赖2.2 准备数据库 以及 对象的映射2.3 配置数据库连接池2.4 使用Mybatis操作数据库2.5 单元测试 三、其他3.1 数据库与Java对象的映射规则 ---- 结…

为什么GD32F303代码运行在flash比sram更快?

我们知道一般MCU的flash有等待周期,随主频提升需要插入flash读取的等待周期,以stm32f103为例,主频在72M时需要插入2个等待周期,故而代码效率无法达到最大时钟频率。 所以STM32F103将代码加载到sram运行速度更快。 但使用GD32F30…

复习kafka

Kafka 介绍 Kafka 是一种分布式的,基于发布/订阅的消息系统。它最初由 LinkedIn 开发,并于 2011 年开源。Kafka 的设计目标是提供一种高效、可靠的消息传输机制,能够处理大量的实时数据。 Kafka 基本概念 Producer:生产者&#xf…

Spring Boot 官方不再支持 Spring Boot 的 2.x 版本!新idea如何创建java8项目

idea现在只能创建最少jdk17 使用 IDEA 内置的 Spring Initializr 创建 Spring Boot 新项目时,没有 Java 8 的选项了,只剩下了 > 17 的版本 是因为 Spring Boot 官方不再支持 Spring Boot 的 2.x 版本了,之后全力维护 3.x;而 …