当前位置: 首页 > news >正文

搭建基于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看到表结构如下,看到数据成功插入:

在这里插入图片描述

在这里插入图片描述

相关文章:

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

上一篇:搭建基于Django的博客系统增加广告轮播图(三) 下一篇:基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五) Sqlite3数据库迁移到MySQL 数据库 迁移原因 Django 的内置数据库 SQL…...

24年护网工具,今年想参加护网的同学要会用

24年护网工具集 吉祥学安全知识星球🔗http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247483727&idx1&sndb05d8c1115a4539716eddd9fde4e5c9&chksmc0e47813f793f105017fb8551c9b996dc7782987e19efb166ab665f44ca6d900210e6c4c0281&scene21…...

解决TrueNas Scale部署immich后人脸识别失败,后台模型下载异常,immich更换支持中文搜索的CLIP大模型

这个问题搞了我几天终于解决了,搜遍网上基本没有详细针对TrueNas Scale部署immich应用后,CLIP模型镜像下载超时导致人脸识别失败,以及更换支持中文识别的CLIP模型的博客。 分析 现象:TrueNas Scale安装immich官方镜像应用后&…...

面试高频问题----2

一、进程、线程、协程有什么区别? 1.进程:进程是操作系统中独立运行的程序实例,每个进程都有自己的内存空间和系统资源;进程之间相互独立,每个进程有自己的内存地址空间,一个进程无法直接访问另一个进程的…...

Nginx的配置文件-详细使用说明

Nginx的配置文件是Nginx服务器运行的核心,它决定了Nginx如何响应和处理各种请求。以下是对Nginx配置文件(通常名为nginx.conf)的详细解析,按照常见的结构和配置项进行分类: 1. 全局块 user:指定Nginx运行的用户和用户组。例如:user nginx;worker_processes:指定工作进…...

YOLOv5改进 | 卷积模块 | 提高网络的灵活性和表征能力的动态卷积【附代码+小白可上手】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 轻量级卷积神经网络由于其低计算预算限制了CNNs的深度(卷积层数)和宽度(通道数),…...

23、linux系统文件和日志分析

linux文件系统与日志分析 文件时存储在硬盘上的,硬盘上的最小存储单位是扇区,每个扇区大大小是512字节。 inode:元信息(文件的属性 权限,创建者,创建日期等) block:块&#xff0c…...

安装VS2017后,离线安装Debugging Tools for Windows(QT5.9.2使用MSVC2017 64bit编译器)

1、背景 安装VS2017后,Windows Software Development Kit - Windows 10.0.17763.132的Debugging Tools for Windows默认不会安装,如下图。这时在QT5.9.2无法使用MSVC2017 64bit编译器。 2、在线安装 如果在线安装参考之前的文章: Qt5.9.2初…...

路由策略实验2

对R7,重发布直连路由 对R2,做双向 对R3同样 先不改优先级 查看,知道所有给R3的路由为151,全部为OSPF。 知道了是错误的,先把3,4之间的线路断掉 接着对R3,让优先级全部回到100(displa…...

Linux网络-守护进程版字典翻译服务器

文章目录 前言一、pid_t setsid(void);二、守护进程翻译字典服务器(守护线程版)效果图 前言 根据上章所讲的后台进程组和session会话,我们知道如果可以将一个进程放入一个独立的session,可以一定程度上守护该进程。 一、pid_t se…...

Python 推导式详解:高效简洁的数据处理技巧

推导式是 Python 提供的一种简洁而强大的语法,用于创建列表、集合和字典。它可以让代码更简洁、更易读,同时提高运行效率。 基本语法 列表推导式 基本语法: [expression for item in iterable if condition]示例: # 生成平方…...

车联网安全入门——ICSim模拟器使用

文章目录 车联网安全入门——ISCim模拟器使用介绍主要特点:使用场景: 安装使用捕获can流量candumpcansnifferwiresharkSavvyCAN主要特点:使用场景: 重放can报文cansendSavvyCAN 总结 车联网安全入门——ISCim模拟器使用 &#x1…...

leetcode - 20.有效的括号(LinkedHashMap)

leetcode题目有效的括号,分类是easy,但是博主前前后后提交了几十次才通过,现在记录一下使用Java语言的写法。 题目链接: 20.有效的括号 题目描述: 给定一个只包括 (,),{,},[&…...

多维数组的动态内存分配(malloc和new)

一.区别指针类型 动态分配二维数组的内存不要赋值给行指针,而要赋值给二级指针。 二.分配动态二维数组的方法 1.使用指针数组 然后对指针数组的每一个元素分别malloc一维数组 2.直接使用malloc // 分配了一个指针数组,row为二维数组行数 int **p (i…...

71、评测OrangePi AIpro开发板和USB CAMERAOAK视频解码+推理+编码+推流测试

基本思想:csdn赞助了OrangePi AIpro开发板,花点时间简单和oak深度相机绑定测试一下,反正之前玩过atlas 200 dk A2,应该差不多,引用了之前的usb相机,方便小伙伴测试使用 第一步:系统刷机,参考官方吧,懒得刷机了,参考官方手册即可链接:https://pan.baidu.com/s/1umXM3i…...

为什么需要开局调用函数?

初始化操作:在你的应用程序启动时,可能需要执行一些初始化操作,例如设置默认值、加载配置、建立数据库连接等。开局调用函数可以帮助你集中管理这些操作,确保它们在应用程序启动时顺利执行。 统一入口:通过一个统一的…...

QT-demo:0轴分布图表

版本:5.9 第一种: 使用 PyQt5 和 Matplotlib 库 安装所需的库: pip install PyQt5 matplotlib创建和显示图表: import sys import numpy as np import matplotlib.pyplot as plt from PyQt5.QtWidgets import QApplication, QMainWindow f…...

git远程仓库限额的解决方法——大文件瘦身

Git作为世界上最优秀的分布式版本控制工具,也是优秀的文件管理工具,它赋予了项目成员对项目进行远程协同开发能力,因此受到越来越多的行业从业人员的喜爱。很多优秀的项目管理平台,比如国内的Gitee,国外的Github&#…...

碰撞检测技术在AI中的重要作用

引言: 随着人工智能技术的不断发展,AI已经渗透到我们生活的方方面面。在游戏、机器人、虚拟现实等领域中,碰撞检测技术扮演着至关重要的角色。本文将探讨碰撞检测技术在AI中的作用,以及如何利用这项技术来改善AI系统的性能和用户体…...

UE5 Cesium2 最新使用地理配准子关卡构造全球场景

参考官方最新教程:Building Global Scenes with Georeferenced Sublevels – Cesium 创建持久关卡(主关卡) 这里一般包含DynamicPawn、CesiumSunSky 和 Cesium World Terrain 全球场景通用的对象。子关卡的创立,官方教程分为了两…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

golang循环变量捕获问题​​

在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下: 问题背景 看这个代码片段: fo…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...