当前位置: 首页 > news >正文

SQLAlchemy 库

SQLAlchemy 是 Python 中最著名、功能最强大的 ORM(对象关系映射)库和 SQL 工具包。它提供了完整的企业级持久化模式,旨在高效、高性能地访问数据库。

1. 核心作用概述

主要功能

# SQLAlchemy 的三大核心组件
core_components = {"ORM (对象关系映射)": "将Python类映射到数据库表","Core (SQL表达式语言)": "提供SQL构造器,可编写数据库无关的SQL","Engine (数据库引擎)": "处理数据库连接和方言适配"
}

2. ORM:对象关系映射

传统SQL vs ORM方式

# 传统方式 - 直接写SQL
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("张三", 25))
conn.commit()# ORM方式 - 操作Python对象
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmakerBase = declarative_base()class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(50))age = Column(Integer)# 操作对象而非SQL
new_user = User(name="张三", age=25)
session.add(new_user)
session.commit()

3. 核心组件详解

a) 声明式基类

from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetimeBase = declarative_base()class Product(Base):__tablename__ = 'products'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(100), nullable=False)price = Column(Integer, default=0)created_at = Column(DateTime, default=datetime.now)def __repr__(self):return f"<Product(id={self.id}, name='{self.name}', price={self.price})>"

b) 数据库引擎和会话

# 创建数据库引擎(支持多种数据库)
engine = create_engine('sqlite:///mydatabase.db', echo=True)  # echo=True显示SQL# 创建所有表
Base.metadata.create_all(engine)# 创建会话工厂
Session = sessionmaker(bind=engine)
session = Session()

4. 基本CRUD操作

创建(Create)

# 添加单个对象
new_product = Product(name="笔记本电脑", price=5999)
session.add(new_product)# 添加多个对象
products = [Product(name="鼠标", price=99),Product(name="键盘", price=199),Product(name="显示器", price=1299)
]
session.add_all(products)
session.commit()  # 提交事务

查询(Read)

# 查询所有
all_products = session.query(Product).all()# 条件查询
expensive_products = session.query(Product).filter(Product.price > 500).all()# 获取单个对象
mouse = session.query(Product).filter(Product.name == "鼠标").first()# 复杂查询
from sqlalchemy import and_, or_
result = session.query(Product).filter(and_(Product.price >= 100, Product.price <= 1000)
).order_by(Product.price.desc()).all()

更新(Update)

# 更新对象
product = session.query(Product).filter_by(name="鼠标").first()
if product:product.price = 79  # 直接修改属性session.commit()    # 提交更改

删除(Delete)

# 删除对象
product = session.query(Product).filter_by(name="键盘").first()
if product:session.delete(product)session.commit()

5. 高级功能

a) 关系映射

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationshipclass Order(Base):__tablename__ = 'orders'id = Column(Integer, primary_key=True)user_id = Column(Integer, ForeignKey('users.id'))# 定义关系user = relationship("User", back_populates="orders")class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(50))# 反向关系orders = relationship("Order", back_populates="user")# 使用关系
user = session.query(User).first()
for order in user.orders:  # 直接访问关联的订单print(order.id)

b) 数据库迁移(Alembic)

# 使用Alembic进行数据库版本控制
# 生成迁移脚本
# alembic revision --autogenerate -m "添加新字段"# 应用迁移
# alembic upgrade head

c) 连接池管理

# 配置连接池
engine = create_engine('postgresql://user:pass@localhost/dbname',pool_size=10,           # 连接池大小max_overflow=20,        # 最大溢出连接数pool_timeout=30,        # 超时时间pool_recycle=3600       # 连接回收时间
)

6. 多数据库支持

SQLAlchemy 支持几乎所有主流数据库:

# 不同数据库的连接字符串示例
databases = {"SQLite": "sqlite:///database.db","PostgreSQL": "postgresql://user:password@localhost/dbname","MySQL": "mysql+pymysql://user:password@localhost/dbname","Oracle": "oracle+cx_oracle://user:password@localhost:1521/dbname","SQL Server": "mssql+pyodbc://user:password@dsn_name"
}# 代码无需修改,只需更改连接字符串
engine = create_engine(databases["PostgreSQL"])

7. 在实际项目中的应用

Web应用中的使用

from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True, nullable=False)email = db.Column(db.String(120), unique=True, nullable=False)def __repr__(self):return f'<User {self.username}>'# 在视图函数中使用
@app.route('/users')
def list_users():users = User.query.all()return {'users': [user.username for user in users]}

数据分析和批处理

# 批量插入数据
def bulk_insert_products(products_data):products = [Product(**data) for data in products_data]session.bulk_save_objects(products)session.commit()# 分页查询
def get_products_page(page=1, per_page=20):return session.query(Product).order_by(Product.id).offset((page-1)*per_page).limit(per_page).all()

8. 优势总结

优势说明
数据库无关性一套代码支持多种数据库
类型安全Python类型与数据库类型映射
自动SQL生成避免SQL注入,提高安全性
连接池管理高效的数据库连接管理
事务支持完整的事务管理机制
丰富的查询API链式调用,表达力强
生态系统完善有Alembic等配套工具

总结

SQLAlchemy 的核心价值在于:

  • 提高开发效率:用面向对象的方式操作数据库

  • 保证代码质量:类型检查、避免SQL注入

  • 维护数据库兼容性:轻松切换数据库后端

  • 支持复杂应用:企业级应用的全功能ORM

它是Python Web开发、数据分析和企业应用中不可或缺的重要库。

http://www.dtcms.com/a/404527.html

相关文章:

  • 给赌场做网站容桂销售型网站建设
  • 经典字符串与数组题目
  • 美团初期是怎么建网站微信的官方首页
  • 网站制作平台能赚钱吗wordpress大前端d8主题免费下载
  • 优化网站的公司哪家好小说阅读网站开发源码
  • Python学习记录(3)
  • 2、CPU深度解析:从微架构到性能优化
  • 超级单页网站模板陕西企尚网络科技有限公司
  • wordpress注册目录seo如何去做优化
  • HTML5介绍(HTML5特性、HTML5功能)
  • 科技云报到:AI变革需要‘减脂增肌’
  • DuckDB docker镜像的获取和容器运行
  • 西安站企业网站设计费做哪个科目
  • 工程公司手机网站wordpress常用技巧
  • 自助建站系统个人网站云南网站建设维护
  • MySQL 复合复合查询及内置函数详解
  • transforms学习笔记
  • 企业网站管理系统软件建网站要花费多少钱
  • 沧州品牌网站建设可信网站认证不做
  • 专业长春网站建设工作室c蔡甸区城乡建设局网站
  • 缙云做网站陕西省住建厅官网
  • 网站开发php岗位职责wordpress 优酷
  • 深圳科源建设集团有限公司网站深圳建立网站公司
  • 苏州网站建设网站建设番禺大石做网站
  • 徐汇品牌网站建设怎么在网站添加paypal
  • 家居企业网站建设策划广州公司注册核名
  • 上线吧做的网站可以备案wordpress防止爬虫
  • 做网站的技术风险中国手工加工网免费供货
  • 青岛新城世纪网站建设公司网页打不开但是有网什么原因无法显示此网页
  • 网站收录免费咨询江阴公司企业网站建设