小沐:戈戈,我最近在做一个项目,需要存储大量的用户数据和管理数据。你知道Python有什么数据库可以推荐吗?
戈戈:当然知道!Python生态中有很多优秀的数据库支持,从轻量级的SQLite到企业级的PostgreSQL,再到NoSQL的MongoDB和Redis,选择非常丰富。
小沐:听起来好专业啊!我想了解更多关于这些数据库的知识。
戈戈:没问题,今天我就给你介绍一下Python数据库的"江湖百态",让你能找到最适合自己项目的"利器"!

1、简介
在Python开发中,数据库是存储和管理数据的核心工具。无论是简单的数据持久化还是复杂的企业级应用,Python都能通过丰富的数据库驱动和ORM框架轻松应对。Python支持的数据库种类繁多,从内置的轻量级SQLite到大型关系型数据库MySQL、PostgreSQL,再到新兴的NoSQL数据库MongoDB和Redis,总有一款能满足你的需求。
2、SQLite
SQLite是Python标准库中内置的轻量级数据库,无需额外安装配置即可使用。它是一个嵌入式数据库,整个数据库就是一个单独的文件,非常适合小型项目、原型开发和移动应用。SQLite的优势在于零配置、简单易用、部署方便,是学习和快速开发的首选。 https://sqlite.org/index.html

https://docs.python.org/3/library/sqlite3.html
SQLite是Python内置模块,直接导入使用即可,无需额外安装。
下面是一段python + SQLite的数据库操作代码示例。
import sqlite3# 连接到SQLite数据库(如果不存在则创建)conn = sqlite3.connect('example.db')cursor = conn.cursor()# 创建表cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL, age INTEGER )''')# 插入数据cursor.execute("INSERT INTO users (name, email, age) VALUES (?, ?, ?)", ('张三', 'zhangsan@example.com', 25))cursor.execute("INSERT INTO users (name, email, age) VALUES (?, ?, ?)", ('李四', 'lisi@example.com', 30))# 提交事务conn.commit()# 查询数据cursor.execute("SELECT * FROM users")rows = cursor.fetchall()print("查询结果:")for row in rows: print(f"ID: {row[0]}, 姓名: {row[1]}, 邮箱: {row[2]}, 年龄: {row[3]}")# 更新数据cursor.execute("UPDATE users SET age = ? WHERE name = ?", (28, '张三'))conn.commit()# 删除数据cursor.execute("DELETE FROM users WHERE name = ?", ('李四',))conn.commit()# 关闭连接conn.close()print("sqlite数据库操作完成!")
代码运行结果如下:


3、MySQL
MySQL是世界上最流行的开源关系型数据库之一,广泛应用于Web应用和企业级系统。它支持大型数据库、高并发访问,拥有丰富的功能和稳定的性能。Python可以通过mysql-connector-python或pymysql等驱动连接MySQL数据库,非常适合需要处理大量数据的企业应用。
https://www.mysql.com/

命令行安装mysql的python库进行访问如下:
pip install mysql-connector-python
下面是一段python + MySQL的数据库操作代码示例。
import mysql.connector# 连接到MySQL数据库conn = mysql.connector.connect( host='localhost', user='root', password='your_password', database='test_db')cursor = conn.cursor()# 创建表cursor.execute(''' CREATE TABLE IF NOT EXISTS products ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, price DECIMAL(10, 2), stock INT DEFAULT 0 )''')# 插入数据sql = "INSERT INTO products (name, price, stock) VALUES (%s, %s, %s)"values = [ ('笔记本电脑', 5999.00, 50), ('无线鼠标', 129.00, 200), ('机械键盘', 399.00, 100)]cursor.executemany(sql, values)conn.commit()# 查询数据cursor.execute("SELECT * FROM products")print("商品列表:")for row in cursor.fetchall(): print(f"ID: {row[0]}, 名称: {row[1]}, 价格: ¥{row[2]}, 库存: {row[3]}")# 更新库存cursor.execute("UPDATE products SET stock = stock - 1 WHERE name = %s", ('无线鼠标',))conn.commit()# 关闭连接cursor.close()conn.close()print("MySQL数据库操作完成!")
代码运行结果如下:

4、PostgreSQL
PostgreSQL是一个功能强大的开源对象关系型数据库系统,以其稳定性、数据完整性和扩展性著称。它支持复杂查询、事务处理、触发器、视图等高级特性,是处理复杂业务逻辑的首选。PostgreSQL还支持JSON、数组等复杂数据类型,非常适合需要处理半结构化数据的现代应用。
https://www.postgresql.org/
使用这个数据库需要先安装。
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

命令行安装PostgreSQL的python库进行访问如下:
pip install psycopg2-binary
下面是一段python + PostgreSQL的数据库操作代码示例。
import psycopg2from psycopg2.extras import RealDictCursor# 连接到PostgreSQL数据库conn = psycopg2.connect( host='localhost', user='postgres', password='your_password', database='test_db')cursor = conn.cursor()# 创建表(使用JSONB列存储复杂数据)cursor.execute(''' CREATE TABLE IF NOT EXISTS orders ( id SERIAL PRIMARY KEY, customer_name VARCHAR(100) NOT NULL, product_data JSONB, total_amount DECIMAL(10, 2), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )''')# 插入包含JSON数据的记录import jsonproduct_info = {"items": [{"name": "手机", "qty": 1}, {"name": "充电器", "qty": 2}]}cursor.execute("INSERT INTO orders (customer_name, product_data, total_amount) VALUES (%s, %s, %s)", ('王五', json.dumps(product_info), 3999.00))conn.commit()# 查询数据cursor.execute("SELECT * FROM orders ORDER BY created_at DESC")print("订单列表:")for row in cursor.fetchall(): print(f"订单ID: {row[0]}, 客户: {row[1]}, 产品: {row[2]}, 金额: ¥{row[3]}, 时间: {row[4]}")# 使用JSON查询cursor.execute(""" SELECT * FROM orders WHERE product_data->'items'->0->>'name' = '手机'""")print("查询JSON数据结果:")for row in cursor.fetchall(): print(f"订单ID: {row[0]}")# 关闭连接cursor.close()conn.close()print("PostgreSQL数据库操作完成!")
代码运行结果如下:
运行后报错,猜测测试test_db数据库实例没有创建。
继续运行如下:
5、MongoDB
MongoDB是最流行的NoSQL文档数据库,使用灵活的JSON-like文档存储数据。与传统关系型数据库相比,MongoDB的无模式特性使得数据结构可以灵活变化,非常适合快速迭代的项目和半结构化数据存储。Python通过pymongo库可以轻松操作MongoDB。
https://www.mongodb.com/ 要使用这个数据库先安装这个数据库。下载地址如下: https://www.mongodb.com/try/download/community

命令行安装MongoDB的python库进行访问如下:
pip install pymongo
下面是一段python + MongoDB的数据库操作代码示例。
from pymongo import MongoClient# 连接到MongoDBclient = MongoClient('mongodb://localhost:27017/')db = client['test_database'] # 选择数据库collection = db['students'] # 选择集合# 插入单条文档student = {"name": "赵六","age": 22,"major": "计算机科学","scores": {"数学": 95, "英语": 88, "编程": 92}}result = collection.insert_one(student)print(f"插入的文档ID: {result.inserted_id}")# 插入多条文档students = [ {"name": "孙七", "age": 21, "major": "软件工程"}, {"name": "周八", "age": 23, "major": "数据科学"}, {"name": "吴九", "age": 20, "major": "人工智能"}]results = collection.insert_many(students)print(f"插入的文档数量: {len(results.inserted_ids)}")# 查询文档print("\n所有学生信息:")for student in collection.find(): print(f"姓名: {student['name']}, 年龄: {student['age']}, 专业: {student['major']}")# 条件查询print("\n年龄大于21的学生:")for student in collection.find({"age": {"$gt": 21}}): print(f"姓名: {student['name']}, 年龄: {student['age']}")# 更新文档collection.update_one( {"name": "小沐"}, {"$set": {"age": 23}})print("\n更新后的小沐信息:")print(collection.find_one({"name": "小沐"}))# 删除文档collection.delete_one({"name": "吴九"})print("\n删除后的学生数量:", collection.count_documents({}))# 关闭连接client.close()print("MongoDB数据库操作完成!")
代码运行结果如下:

6、Redis
Redis是一个高性能的内存数据结构存储系统,常用作缓存数据库和消息队列。它支持字符串、哈希、列表、集合、有序集合等多种数据结构,读写速度极快。Redis在Python Web开发中常用于缓存会话信息、存储实时数据、实现分布式锁等场景。
https://redis.io/ 要使用这个redis数据库也需要提前安装它,下载地址如下: https://github.com/tporadowski/redis/releases


命令行安装python的redis客户端访问库如下:
pip install redis
下面是一段python + Redis的数据库操作代码示例。
import redisimport jsonimport time# 连接到Redisr = redis.Redis(host='localhost', port=6379, decode_responses=True)# 字符串操作r.set('username', '小明')r.setex('session_token', 3600, 'abc123xyz') # 设置过期时间print(f"用户名: {r.get('username')}")print(f"会话令牌: {r.get('session_token')}")# 哈希操作 - 存储用户信息user_info = {'name': '小红','email': 'xiaohong@example.com','age': '24'}r.hset('user:1001', mapping=user_info)print(f"用户信息: {r.hgetall('user:1001')}")# 列表操作 - 任务队列r.lpush('task_queue', '任务A', '任务B', '任务C')print(f"任务列表: {r.lrange('task_queue', 0, -1)}")# 集合操作 - 标签系统r.sadd('tags:article:1', 'Python', '数据库', '教程')print(f"文章标签: {r.smembers('tags:article:1')}")# 有序集合操作 - 排行榜r.zadd('leaderboard', {'玩家A': 1000, '玩家B': 950, '玩家C': 980})print(f"排行榜: {r.zrevrange('leaderboard', 0, 2, withscores=True)}")# 发布/订阅pubsub = r.pubsub()pubsub.subscribe('news_channel')r.publish('news_channel', '这是一条重要消息!')print(f"收到消息: {pubsub.get_message()}")# 设置过期时间r.set('temp_data', '临时数据', ex=60)print(f"过期时间: {r.ttl('temp_data')}秒")# 关闭连接r.close()print("Redis数据库操作完成!")
代码运行结果如下:

小沐:戈戈,谢谢你介绍了这么多Python数据库!感觉就像进入了数据库的"武林大会",每个数据库都有自己的"独门绝技"。
戈戈:没错,SQLite就像"少林寺"——功底扎实、简单实用;MySQL和PostgreSQL就像"武当"——博大精深、适合企业级应用;MongoDB则像"明教"——灵活多变、不拘一格;Redis则是"逍遥派"——速度奇快、专精于缓存和实时数据。
小沐:这个比喻太形象了!我会根据项目的实际需求,选择最合适的数据库来"练功"。
戈戈:正是如此!数据库是编程的"内功",选对了才能让你的应用"功力大增"!

后续
如果您觉得这些文字有一点点用处,请给作者点个赞或关个注;╮( ̄▽ ̄)╭如果您有技术问题探讨,评论处留言。//(ㄒoㄒ)//谢谢各位童鞋们啦( ´ ▽ ` )ノ ( ´ ▽ `` )っ!更多精彩文章详见:CSDN博客:爱看书的小沐