Python连接数据库的核心在于使用相应的数据库驱动库,并通过标准接口完成连接、操作与关闭,以下是常见数据库的连接方法与示例:
SQLite数据库(Python内置支持)
适用场景:轻量级本地存储,无需安装数据库服务
驱动模块:sqlite3
(Python标准库内置)
连接语句:
import sqlite3 # 连接数据库(自动创建文件) conn = sqlite3.connect('example.db') # 创建游标对象 cursor = conn.cursor() # 执行SQL语句(如建表) cursor.execute(''' CREATE TABLE users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER ) ''') # 提交事务并关闭连接 conn.commit() conn.close()
特点:
- 文件型数据库,数据存储在
.db
文件中 - 无需服务器配置,直接通过文件路径访问
- 适合原型开发、测试或小型应用
MySQL数据库
适用场景:中型应用,需要网络访问的数据库服务
驱动模块:PyMySQL
或 mysql-connector-python
安装命令:
pip install pymysql # 或 pip install mysql-connector-python
连接语句(PyMySQL示例):
import pymysql # 连接数据库 conn = pymysql.connect( host='localhost', # 数据库地址 user='root', # 用户名 password='123456', # 密码 database='test_db', # 数据库名称 charset='utf8mb4' # 编码 ) # 创建游标并执行SQL cursor = conn.cursor() cursor.execute('SELECT VERSION()') # 测试连接 print(cursor.fetchone()) # 输出MySQL版本 conn.close()
关键参数:
host
:数据库服务器地址(如0.0.1
或localhost
)port
:默认端口为3306(需与数据库配置一致)charset
:建议设置为utf8mb4
以支持表情符号等特殊字符
PostgreSQL数据库
适用场景:复杂业务场景,需要高扩展性
驱动模块:psycopg2
安装命令:
pip install psycopg2
连接语句:
import psycopg2 # 连接数据库(DSN格式) conn = psycopg2.connect( dsn="dbname='test_db' user='postgres' password='123456' host='localhost' port='5432'" ) # 执行SQL并获取结果 cursor = conn.cursor() cursor.execute('SELECT VERSION()') print(cursor.fetchone()) conn.close()
特点:
- 默认端口为5432,支持复杂数据类型(如JSON、数组)
- 需提前创建数据库和用户
MongoDB数据库(非关系型)
适用场景:文档型存储,高并发读写
驱动模块:pymongo
安装命令:
pip install pymongo
连接语句:
from pymongo import MongoClient # 连接MongoDB(URI格式) client = MongoClient('mongodb://localhost:27017/') # 选择数据库和集合 db = client['test_db'] collection = db['users'] # 插入文档 doc = {'name': 'Alice', 'age': 25} collection.insert_one(doc) # 查询文档 for item in collection.find(): print(item)
关键参数:
- URI中可包含用户名密码(如
mongodb://user:pass@localhost:27017/
) - 默认端口为27017,无需预创建数据库
Redis数据库(键值存储)
适用场景:缓存、会话管理
驱动模块:redis
安装命令:
pip install redis
连接语句:
import redis # 连接Redis r = redis.Redis( host='localhost', # 地址 port=6379, # 默认端口 password=None # 若有密码需填写 ) # 设置键值对 r.set('key', 'value') # 获取值 print(r.get('key')) # 输出 b'value'
特点:
- 纯内存操作,高性能
- 支持持久化(RDB/AOF)
主流数据库对比表
数据库类型 | 驱动/模块 | 默认端口 | 连接字符串示例 | 适用场景 |
---|---|---|---|---|
SQLite | sqlite3(内置) | sqlite3.connect('example.db') |
本地存储、测试 | |
MySQL | PyMySQL/mysql-connector | 3306 | pymysql.connect(host=...) |
中小型Web应用、LAMP栈 |
PostgreSQL | psycopg2 | 5432 | postgresql://user:pass@host/db |
复杂业务、高扩展性需求 |
MongoDB | pymongo | 27017 | mongodb://user:pass@host:port |
高并发、文档存储 |
Redis | redis | 6379 | redis.Redis(host='localhost') |
缓存、会话、消息队列 |
常见问题与解决方案(FAQs)
如何判断数据库连接是否成功?
- 测试查询:执行简单SQL(如
SELECT 1
)或调用ping()
方法(如Redis)。 - 异常处理:用
try-except
捕获连接错误,try: conn = pymysql.connect(...) print("连接成功") except pymysql.Error as e: print(f"连接失败: {e}")
不同数据库的密码忘记怎么办?
- MySQL:通过命令行重置(如
ALTER USER 'root' IDENTIFIED BY 'new_pass';
)或使用管理工具(如phpMyAdmin、SqlYog)重置。 - PostgreSQL:修改
pg_hba.conf
文件后重启服务,或通过SQL语句ALTER USER postgres WITH PASSWORD 'new_pass';
。 - MongoDB:进入
admin
数据库后执行db.changeUserPassword("user", "new_pass");
。 - Redis:若未设置密码,可直接通过配置文件
redis.conf
添加requirepass
项
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/74041.html