在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()
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复