跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Python 数据库连接
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Python数据库连接 = == 介绍 == Python数据库连接是指在Python程序中与数据库建立通信的过程,允许开发者执行SQL查询、插入、更新和删除数据等操作。Python通过多种数据库适配器(如`sqlite3`、`psycopg2`、`MySQLdb`等)支持与关系型数据库(如SQLite、PostgreSQL、MySQL)和非关系型数据库(如MongoDB)的交互。本节将详细介绍Python中常见的数据库连接方式及其实际应用。 == 数据库连接的基本步骤 == Python连接数据库通常遵循以下步骤: 1. '''导入数据库适配器模块''':选择适合目标数据库的Python库。 2. '''建立连接''':使用适配器提供的函数创建与数据库的连接。 3. '''创建游标''':通过连接对象创建游标(Cursor),用于执行SQL语句。 4. '''执行SQL操作''':通过游标执行查询或修改数据的命令。 5. '''提交或回滚事务''':确认更改(commit)或撤销(rollback)。 6. '''关闭连接''':释放资源。 == 常见数据库连接示例 == === SQLite === SQLite是Python内置的轻量级数据库,无需额外安装服务器。 <syntaxhighlight lang="python"> import sqlite3 # 建立连接(如果数据库不存在会自动创建) conn = sqlite3.connect('example.db') # 创建游标 cursor = conn.cursor() # 创建表 cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''') # 插入数据 cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 25)) # 查询数据 cursor.execute("SELECT * FROM users") print(cursor.fetchall()) # 输出: [(1, 'Alice', 25)] # 提交更改并关闭连接 conn.commit() conn.close() </syntaxhighlight> === MySQL === 需安装`mysql-connector-python`或`PyMySQL`库。 <syntaxhighlight lang="python"> import pymysql # 建立连接 conn = pymysql.connect( host='localhost', user='root', password='password', database='test_db' ) cursor = conn.cursor() cursor.execute("SELECT VERSION()") print(f"MySQL版本: {cursor.fetchone()[0]}") # 输出类似: MySQL版本: 8.0.25 conn.close() </syntaxhighlight> === PostgreSQL === 需安装`psycopg2`库。 <syntaxhighlight lang="python"> import psycopg2 conn = psycopg2.connect( host="localhost", database="mydb", user="postgres", password="secret" ) cursor = conn.cursor() cursor.execute("SELECT * FROM products WHERE price > %s", (50,)) print(cursor.fetchall()) # 输出符合条件的产品列表 conn.close() </syntaxhighlight> == ORM工具 == 对象关系映射(ORM)工具如SQLAlchemy和Django ORM提供了更高层次的数据库操作方式: <syntaxhighlight lang="python"> from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() engine = create_engine('sqlite:///orm_example.db') class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer) # 创建表 Base.metadata.create_all(engine) # 插入数据 from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) session = Session() session.add(User(name="Bob", age=30)) session.commit() </syntaxhighlight> == 连接池技术 == 对于高并发应用,连接池(如`DBUtils`)可显著提升性能: <syntaxhighlight lang="python"> from dbutils.pooled_db import PooledDB import pymysql pool = PooledDB( creator=pymysql, host='localhost', user='root', password='password', database='test_db', maxconnections=10 ) # 从池中获取连接 conn = pool.connection() cursor = conn.cursor() cursor.execute("SELECT * FROM large_table") conn.close() # 实际返回到连接池 </syntaxhighlight> == 事务管理 == Python数据库连接支持ACID事务: <mermaid> flowchart LR A[开始事务] --> B[执行操作1] B --> C[执行操作2] C --> D{成功?} D -->|是| E[提交事务] D -->|否| F[回滚事务] </mermaid> <syntaxhighlight lang="python"> try: conn = sqlite3.connect('bank.db') cursor = conn.cursor() cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE id = 1") cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE id = 2") conn.commit() # 只有两个操作都成功时才提交 except Exception as e: conn.rollback() # 任一失败则回滚 print(f"事务失败: {e}") finally: conn.close() </syntaxhighlight> == 安全注意事项 == 1. 始终使用参数化查询防止SQL注入: <syntaxhighlight lang="python"> # 错误方式(不安全) cursor.execute(f"SELECT * FROM users WHERE name = '{user_input}'") # 正确方式 cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,)) </syntaxhighlight> 2. 限制数据库用户权限 3. 加密敏感连接信息 == 性能优化 == * 使用连接池减少连接创建开销 * 批量操作代替单条操作: <syntaxhighlight lang="python"> # 低效方式 for item in items: cursor.execute("INSERT INTO table VALUES (?)", (item,)) # 高效方式 cursor.executemany("INSERT INTO table VALUES (?)", [(item,) for item in items]) </syntaxhighlight> * 为常用查询创建索引 == 实际应用案例 == '''电商平台库存管理系统''': 1. 使用PostgreSQL存储产品信息 2. 通过SQLAlchemy ORM管理产品分类 3. 采用连接池处理高并发订单 4. 事务确保库存扣减与订单创建的原子性 == 总结 == Python数据库连接是Web开发的核心技能,从简单的SQLite嵌入式数据库到复杂的PostgreSQL集群,Python都提供了完善的接口支持。掌握连接管理、ORM工具和性能优化技术,能够构建高效可靠的数据驱动应用。 [[Category:编程语言]] [[Category:Python]] [[Category:Python Web 开发]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)