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

lesson48:Ubuntu下Python与三大数据库实战:MySQL、MongoDB、Redis全攻略

目录

一、数据库选型概览:特性与适用场景

二、MySQL:关系型数据的可靠管理

2.1 安装与初始化配置

2.2 核心配置(允许远程访问)

2.3 Python交互实战(pymysql)

安装依赖库

基础操作示例

三、MongoDB:灵活的文档型数据库

3.1 安装官方最新版

3.2 安全配置与用户认证

3.3 Python交互实战(pymongo)

安装依赖库

基础操作示例

四、Redis:高性能内存数据库

4.1 安装与基础配置

4.2 Python交互实战(redis-py)

安装依赖库

基础操作示例

四、三大数据库对比与场景选择指南

五、总结与进阶学习


在现代应用开发中,数据库是存储和管理数据的核心组件。本文将详细介绍在Ubuntu操作系统下,如何安装配置MySQL、MongoDB和Redis三大主流数据库,并通过Python实现高效的数据交互。无论是关系型数据存储、文档型数据管理还是高性能缓存需求,本文都能为你提供清晰的操作指南和最佳实践。

一、数据库选型概览:特性与适用场景

在开始实战前,先快速了解这三种数据库的核心特性,帮助你在实际项目中做出合适选择:

数据库类型数据模型核心优势典型应用场景
MySQL关系型数据库表结构、SQL查询事务支持、ACID合规、复杂查询能力电商订单、用户管理、财务系统
MongoDB文档型NoSQLBSON文档(类JSON)schema灵活、水平扩展、嵌套数据支持内容管理、日志存储、实时分析
Redis内存数据库Key-Value键值对超高性能、多数据结构、原子操作缓存系统、会话存储、实时计数器

接下来,我们将逐一实现这三种数据库的环境搭建与Python交互。

二、MySQL:关系型数据的可靠管理

2.1 安装与初始化配置

Ubuntu系统下通过APT包管理器可快速安装MySQL:

# 更新软件源
sudo apt update
# 安装MySQL服务器
sudo apt install mysql-server -y
# 启动并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql
# 运行安全配置脚本(必须执行!)
sudo mysql_secure_installation

安全配置脚本会引导你完成:

  • 设置root密码
  • 移除匿名用户
  • 禁止root远程登录
  • 删除测试数据库

2.2 核心配置(允许远程访问)

默认MySQL仅允许本地访问,如需远程连接需修改配置:

# 编辑配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

找到并修改以下参数:

# 将bind-address从127.0.0.1改为0.0.0.0
bind-address = 0.0.0.0

重启服务使配置生效:

sudo systemctl restart mysql

2.3 Python交互实战(pymysql)

安装依赖库
pip install pymysql
基础操作示例
import pymysql
from pymysql.cursors import DictCursor# 数据库连接配置
config = {
'host': 'localhost',
'user': 'root',
'password': 'your_password',
'db': 'test_db',
'charset': 'utf8mb4',
'cursorclass': DictCursor # 使查询结果以字典形式返回
}# 上下文管理器自动处理连接关闭
with pymysql.connect(**config) as conn:
with conn.cursor() as cursor:
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')# 插入数据
cursor.execute(
"INSERT INTO users (name, email) VALUES (%s, %s)",
("Alice", "alice@example.com")
)
conn.commit() # 事务提交# 查询数据
cursor.execute("SELECT * FROM users")
print("查询结果:", cursor.fetchall())

最佳实践:生产环境中应避免硬编码密码,建议使用环境变量或配置文件存储敏感信息。

三、MongoDB:灵活的文档型数据库

3.1 安装官方最新版

MongoDB官方提供了Ubuntu专用源,确保获取最新稳定版:

# 导入MongoDB公钥
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor# 创建源列表文件
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] \
https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list# 安装MongoDB
sudo apt update
sudo apt install -y mongodb-org
# 启动服务
sudo systemctl start mongod
sudo systemctl enable mongod

3.2 安全配置与用户认证

默认MongoDB无认证机制,需手动配置:

# 连接MongoDB
mongosh# 创建管理员用户
use admin
db.createUser({
user: "admin",
pwd: "your_secure_password",
roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
})# 启用认证(修改配置文件)
sudo vim /etc/mongod.conf

在配置文件中添加安全认证配置:

security:
authorization: enabled

重启服务使配置生效:

sudo systemctl restart mongod

3.3 Python交互实战(pymongo)

安装依赖库
pip install pymongo
基础操作示例
from pymongo import MongoClient
from pymongo.errors import DuplicateKeyError# 连接MongoDB(带认证)
client = MongoClient(
"mongodb://localhost:27017/",
username="admin",
password="your_secure_password",
authSource="admin"
)# 获取数据库和集合
db = client["blog_db"]
articles = db["articles"]# 插入文档
try:
result = articles.insert_one({
"title": "MongoDB入门教程",
"content": "这是一篇关于MongoDB的实战文章",
"tags": ["NoSQL", "数据库", "Python"],
"author": {"name": "John", "email": "john@example.com"},
"created_at": "2025-08-28"
})
print("插入成功,文档ID:", result.inserted_id)
except DuplicateKeyError:
print("文档已存在")# 查询文档
for article in articles.find({"tags": "Python"}).sort("created_at", -1):
print(article["title"], article["author"]["name"])

注意:MongoDB的集合和数据库在首次插入数据时自动创建,无需手动初始化。

四、Redis:高性能内存数据库

4.1 安装与基础配置

Redis在Ubuntu默认源中版本较新,可直接安装:

# 安装Redis
sudo apt install redis-server -y# 修改配置文件(重要!)
sudo vim /etc/redis/redis.conf

关键配置项修改:

# 绑定地址(允许远程访问设为0.0.0.0)
bind 0.0.0.0
# 设置密码认证
requirepass your_redis_password
# 持久化配置(默认已启用RDB)
save 60 1000 # 60秒内有1000次写入则持久化

重启Redis服务:

sudo systemctl restart redis-server
sudo systemctl enable redis-server

4.2 Python交互实战(redis-py)

安装依赖库
pip install redis
基础操作示例
import redis
from redis.exceptions import AuthenticationError# 连接Redis
try:
r = redis.Redis(
host='localhost',
port=6379,
password='your_redis_password',
decode_responses=True # 自动将字节转为字符串
)# 字符串操作
r.set('user:1:name', 'Alice', ex=3600) # 过期时间1小时
print("用户名:", r.get('user:1:name'))# 哈希表操作
r.hset('user:1', mapping={
'age': 30,
'email': 'alice@example.com'
})
print("用户信息:", r.hgetall('user:1'))# 列表操作(实现简单队列)
r.lpush('task_queue', 'task1', 'task2', 'task3')
print("队列长度:", r.llen('task_queue'))
print("取出任务:", r.rpop('task_queue'))except AuthenticationError:
print("认证失败,请检查密码")

性能提示:Redis适合存储频繁访问的热数据,建议结合过期策略(如ex参数)避免内存溢出。

四、三大数据库对比与场景选择指南

评估维度MySQLMongoDBRedis
数据结构固定表结构动态JSON文档键值对+多种数据结构
查询能力SQL复杂查询丰富查询操作+聚合管道基础查询+Lua脚本扩展
事务支持完整ACID事务多文档事务(4.0+)单命令原子性
读写性能中高(磁盘IO)高(内存映射+磁盘持久化)极高(纯内存操作)
适用数据规模GB-TB级TB级以上GB级(受内存限制)

场景决策流程图

  1. 数据是否有严格结构化关系?→ 选MySQL
  2. 是否需要高频读写和低延迟?→ 选Redis
  3. 数据结构是否多变或嵌套?→ 选MongoDB
  4. 是否需要缓存热点数据?→ 选Redis
  5. 是否需要复杂报表查询?→ 选MySQL

五、总结与进阶学习

本文详细介绍了Ubuntu环境下MySQL、MongoDB和Redis的安装配置及Python交互方法,涵盖了从基础安装到安全配置的全流程。实际开发中,这三种数据库常结合使用:

  • Redis作为缓存层加速访问
  • MongoDB存储非结构化数据
  • MySQL处理核心业务数据

进阶学习建议

  • MySQL:深入学习索引优化、事务隔离级别和主从复制
  • MongoDB:掌握聚合管道、分片集群和地理空间查询
  • Redis:学习持久化策略、集群模式和分布式锁实现

通过合理搭配这三种数据库,可构建既灵活又高性能的数据存储架构,满足现代应用的多样化需求。

http://www.dtcms.com/a/354445.html

相关文章:

  • 基于uni-app的iOS应用上架,从打包到分发的全流程
  • 算法题打卡力扣第15题:三数之和(mid)
  • 本地构建的 Docker 镜像迁移到另一台电脑上运行
  • Python自动化测试完整教程:pytest + selenium实战
  • Windows 环境下搭建移动端自动化测试环境(JDK + SDK + Node.js + Appium)
  • 【Rust】 4. 函数与闭包
  • React过渡更新:优化渲染性能的秘密
  • 在Excel和WPS表格中隔一行插入一个空白行
  • HarmonyOS 中的 sharedTransition:实现流畅的页面过渡动画
  • 从数字到价值:ESG评级的深层变革
  • 鸿蒙 5.1 深度解析:ArkUI 4.1 升级与分布式开发新范式
  • Linux 软件编程(十三)网络编程:TCP 并发服务器模型与 IO 多路复用机制、原理epoll
  • 【Windows】netstat命令解析及端口状态解释
  • 【PostgreSQL内核学习:通过 ExprState 提升哈希聚合与子计划执行效率(二)】
  • 现代前端状态管理:从原理到实战(Vue/React全栈方案)
  • 【自记】Python 中,对象的比较运算符(>, ==, <=, >=)对应特定的魔法方法详解
  • H5测试全攻略:要点解析
  • 一个工程多Module的微服务项目,如何在GitLab中配置CI/CD
  • MySQL数据库精研之旅第十三期:吃透用户与权限管理,筑牢数据库安全第一道防线
  • 深入解析Java并发编程与单例模式
  • 详解Log4j组件:工业级Java日志框架
  • Redis实战-点赞的解决方案
  • vue布局
  • LightGBM 在金融逾期天数预测任务中的经验总结
  • 2025年渗透测试面试题总结-36(题目+回答)
  • 2025年渗透测试面试题总结-37(题目+回答)
  • vue3 数据库 内的 字符 显示 换行符
  • LeetCode-238除自身以外数组的乘积
  • 基于单片机步进电机控制电机正反转加减速系统Proteus仿真(含全部资料)
  • codeforces(1045)(div2) E. Power Boxes