在Python中设置数据库是开发应用程序时的常见需求,涉及数据库选择、连接配置、操作执行等步骤,以下是详细的操作指南,涵盖主流数据库(如MySQL、PostgreSQL、SQLite)的设置方法,并包含代码示例和注意事项。
选择数据库类型
根据应用场景选择合适的数据库:
- SQLite:轻量级嵌入式数据库,适合小型应用或开发测试,无需额外服务。
- MySQL:关系型数据库,适合Web应用,支持高并发。
- PostgreSQL:功能强大的开源关系型数据库,支持复杂查询和扩展。
- MongoDB:NoSQL数据库,适合非结构化数据(需额外安装
pymongo库)。
安装数据库驱动
Python通过第三方库连接数据库,需先安装对应驱动:

# MySQL pip install pymysql # PostgreSQL pip install psycopg2-binary # SQLite(无需安装,Python内置)
数据库连接配置
SQLite连接(无需服务器)
import sqlite3
# 创建或连接数据库文件
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
MySQL连接(需服务器地址、用户名、密码)
import pymysql
conn = pymysql.connect(
host='localhost', # 数据库服务器地址
user='root', # 用户名
password='password', # 密码
database='test_db', # 数据库名
charset='utf8mb4' # 字符集
)
cursor = conn.cursor()
PostgreSQL连接
import psycopg2
conn = psycopg2.connect(
host='localhost',
user='postgres',
password='password',
database='test_db'
)
cursor = conn.cursor()
执行数据库操作
创建表
# SQLite/MySQL/PostgreSQL通用SQL语法
create_table_sql = """
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE
)
"""
cursor.execute(create_table_sql)
conn.commit() # 提交事务
插入数据
# 使用参数化查询防止SQL注入
insert_sql = "INSERT INTO users (name, email) VALUES (%s, %s)"
cursor.execute(insert_sql, ('Alice', 'alice@example.com'))
conn.commit()
查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall() # 获取所有结果
for row in rows:
print(row)
更新和删除数据
# 更新
update_sql = "UPDATE users SET email = %s WHERE name = %s"
cursor.execute(update_sql, ('alice_new@example.com', 'Alice'))
conn.commit()
# 删除
delete_sql = "DELETE FROM users WHERE name = %s"
cursor.execute(delete_sql, ('Alice',))
conn.commit()
事务管理
数据库操作默认为自动提交模式,可通过conn.commit()手动提交或conn.rollback()回滚:
try:
cursor.execute("INSERT INTO users VALUES (1, 'Bob', 'bob@example.com')")
conn.commit()
except Exception as e:
conn.rollback()
print(f"Error: {e}")
连接池优化(高并发场景)
使用DBUtils或SQLAlchemy管理连接池,避免频繁创建连接:

from DBUtils.PooledDB import PooledDB
pool = PooledDB(
creator=pymysql,
maxconnections=6,
host='localhost',
user='root',
password='password',
database='test_db'
)
conn = pool.connection()
cursor = conn.cursor()
关闭连接
操作完成后需关闭游标和连接:
cursor.close() conn.close()
常见问题与解决方案
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 连接超时 | 数据库服务未启动或网络问题 | 检查服务状态和防火墙设置 |
| SQL注入漏洞 | 直接拼接SQL字符串 | 使用参数化查询(如%s占位符) |
| 字符编码错误 | 数据库与Python编码不一致 | 统一使用utf8mb4字符集 |
相关问答FAQs
Q1: 如何在Python中连接远程数据库?
A1: 需确保远程数据库服务器允许外部访问(如MySQL需设置bind-address=0.0.0.0并授权用户IP),连接时指定公网IP和端口,

conn = pymysql.connect(host='192.168.1.100', port=3306, user='root', password='password')
Q2: 如何处理数据库连接池的泄漏问题?
A2: 使用try-finally或with语句确保连接归还池中:
from contextlib import contextmanager
@contextmanager
def get_db_connection():
conn = pool.connection()
try:
yield conn
finally:
conn.close()
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/245256.html