SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式。本文将介绍如何使用SQLAlchemy ORM进行数据库操作。
目录
安装SQLAlchemy
核心概念
连接数据库
定义数据模型
创建数据库表
基本CRUD操作
查询数据
关系操作
事务管理
最佳实践
安装
bash
pip install sqlalchemy
如果需要连接特定数据库,还需安装相应的驱动程序:
bash
PostgreSQL
pip install psycopg2-binary
MySQL
pip install mysql-connector-python
SQLite (Python标准库已包含,无需额外安装)
核心概念
Engine:数据库连接的引擎,负责与数据库通信
Session:数据库会话,管理所有持久化操作
Model:数据模型类,对应数据库中的表
Query:查询对象,用于构建和执行数据库查询
连接数据库
python
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
创建数据库连接引擎
SQLite示例
engine = create_engine('sqlite:///example.db', echo=True)
PostgreSQL示例
engine = create_engine('postgresql://username:password@localhost:5432/mydatabase')
MySQL示例
engine = create_engine('mysql+mysqlconnector://username:password@localhost:3306/mydatabase')
创建会话工厂
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
创建会话实例
session = SessionLocal()
定义数据模型
python
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, declarative_base
创建基类
Base = declarative_base()
class User(Base):
tablename = 'users'
id = Column(Integer, primary_key=True, index=True)
name = Column(String(50), nullable=False)
email = Column(String(100), unique=True, index=True)# 定义一对多关系
posts = relationship("Post", back_populates="author")
class Post(Base):
tablename = 'posts'
id = Column(Integer, primary_key=True, index=True)
title = Column(String(100), nullable=False)
content = Column(String(500))
author_id = Column(Integer, ForeignKey('users.id'))# 定义多对一关系
author = relationship("User", back_populates="posts")# 定义多对多关系(通过关联表)
tags = relationship("Tag", secondary="post_tags", back_populates="posts")
class Tag(Base):
tablename = 'tags'
id = Column(Integer, primary_key=True, index=True)
name = Column(String(30), unique=True, nullable=False)posts = relationship("Post", secondary="post_tags", back_populates="tags")
关联表(用于多对多关系)
class PostTag(Base):
tablename = 'post_tags'
post_id = Column(Integer, ForeignKey('posts.id'), primary_key=True)
tag_id = Column(Integer, ForeignKey('tags.id'), primary_key=True)
创建数据库表
python
创建所有表
Base.metadata.create_all(bind=engine)
删除所有表
Base.metadata.drop_all(bind=engine)
基本CRUD操作
创建数据
python
创建新用户
new_user = User(name="张三", email="zhangsan@example.com")
session.add(new_user)
session.commit()
批量创建
session.add_all([
User(name="李四", email="lisi@example.com"),
User(name="王五", email="wangwu@example.com")
])
session.commit()
读取数据
python
获取所有用户
users = session.query(User).all()
获取第一个用户
first_user = session.query(User).first()
根据ID获取用户
user = session.query(User).get(1)
更新数据
python
查询并更新
user = session.query(User).get(1)
user.name = "张三四"
session.commit()
批量更新
session.query(User).filter(User.name.like("张%")).update({"name": "张氏"}, synchronize_session=False)
session.commit()
删除数据
python
查询并删除
user = session.query(User).get(1)
session.delete(user)
session.commit()
批量删除
session.query(User).filter(User.name == "李四").delete(synchronize_session=False)
session.commit()
查询数据
基本查询
python
获取所有记录
users = session.query(User).all()
获取特定字段
names = session.query(User.name).all()
排序
users = session.query(User).order_by(User.name.desc()).all()
限制结果数量
users = session.query(User).limit(10).all()
偏移量
users = session.query(User).offset(5).limit(10).all()
过滤查询
python
from sqlalchemy import or_
等值过滤
user = session.query(User).filter(User.name == "张三").first()
模糊查询
users = session.query(User).filter(User.name.like("张%")).all()
IN查询
users = session.query(User).filter(User.name.in_(["张三", "李四"])).all()
多条件查询
users = session.query(User).filter(
User.name == "张三",
User.email.like("%@example.com")
).all()
或条件
users = session.query(User).filter(
or_(User.name == "张三", User.name == "李四")
).all()
不等于
users = session.query(User).filter(User.name != "张三").all()
聚合查询
python
from sqlalchemy import func
计数
count = session.query(User).count()
分组计数
user_post_count = session.query(
User.name,
func.count(Post.id)
).join(Post).group_by(User.name).all()
求和、平均值等
avg_id = session.query(func.avg(User.id)).scalar()
连接查询
python
内连接
results = session.query(User, Post).join(Post).filter(Post.title.like("%Python%")).all()
左外连接
results = session.query(User, Post).outerjoin(Post).all()
指定连接条件
results = session.query(User, Post).join(Post, User.id == Post.author_id).all()
关系操作
python
创建带关系的对象
user = User(name="赵六", email="zhaoliu@example.com")
post = Post(title="我的第一篇博客", content="Hello World!", author=user)
session.add(post)
session.commit()
通过关系访问
print(f"文章 '{post.title}' 的作者是 {post.author.name}")
print(f"用户 {user.name} 的所有文章:")
for p in user.posts:
print(f" - {p.title}")
多对多关系操作
python_tag = Tag(name="Python")
sqlalchemy_tag = Tag(name="SQLAlchemy")
post.tags.append(python_tag)
post.tags.append(sqlalchemy_tag)
session.commit()
print(f"文章 '{post.title}' 的标签:")
for tag in post.tags:
print(f" - {tag.name}")
事务管理
python
自动提交事务
try:
user = User(name="测试用户", email="test@example.com")
session.add(user)
session.commit()
except Exception as e:
session.rollback()
print(f"发生错误: {e}")
使用事务上下文管理器
from sqlalchemy.orm import Session
def create_user(session: Session, name: str, email: str):
try:
user = User(name=name, email=email)
session.add(user)
session.commit()
return user
except:
session.rollback()
raise
嵌套事务
with session.begin_nested():
user = User(name="事务用户", email="transaction@example.com")
session.add(user)
保存点
savepoint = session.begin_nested()
try:
user = User(name="保存点用户", email="savepoint@example.com")
session.add(user)
savepoint.commit()
except:
savepoint.rollback()
最佳实践
会话管理:为每个请求创建新会话,请求结束后关闭
异常处理:始终处理异常并适当回滚事务
延迟加载:注意N+1查询问题,使用 eager loading 优化
连接池:合理配置连接池大小和超时设置
数据验证:在模型层或应用层验证数据完整性
python
使用上下文管理器管理会话
from contextlib import contextmanager
@contextmanager
def get_db():
db = SessionLocal()
try:
yield db
db.commit()
except Exception:
db.rollback()
raise
finally:
db.close()
使用示例
with get_db() as db:
user = User(name="上下文用户", email="context@example.com")
db.add(user)
总结
SQLAlchemy ORM提供了强大而灵活的数据库操作方式,通过本文的介绍,您应该能够:
c++语言aa.j6b2x5.infoJIWWQc++语言
c++语言aaf.j6b2x5.infoJIWWQc++语言
c++语言ab.j6b2x5.infoJIWWQc++语言
c++语言abm.j6b2x5.infoJIWWQc++语言
c++语言abs.j6b2x5.infoJIWWQc++语言
c++语言ac.j6b2x5.infoJIWWQc++语言
c++语言ad.j6b2x5.infoJIWWQc++语言
c++语言adg.j6b2x5.infoJIWWQc++语言
c++语言adt.j6b2x5.infoJIWWQc++语言
c++语言adx.j6b2x5.infoJIWWQc++语言
c++语言ae.j6b2x5.infoJIWWQc++语言
c++语言ag.j6b2x5.infoJIWWQc++语言
c++语言agk.j6b2x5.infoJIWWQc++语言
c++语言agq.j6b2x5.infoJIWWQc++语言
c++语言agr.j6b2x5.infoJIWWQc++语言
c++语言agt.j6b2x5.infoJIWWQc++语言
c++语言agu.j6b2x5.infoJIWWQc++语言
c++语言ah.j6b2x5.infoJIWWQc++语言
c++语言ahh.j6b2x5.infoJIWWQc++语言
c++语言ai.j6b2x5.infoJIWWQc++语言
c++语言ail.j6b2x5.infoJIWWQc++语言
c++语言aiw.j6b2x5.infoJIWWQc++语言
c++语言aj.j6b2x5.infoJIWWQc++语言
c++语言ajd.j6b2x5.infoJIWWQc++语言
c++语言ajq.j6b2x5.infoJIWWQc++语言
c++语言ajs.j6b2x5.infoJIWWQc++语言
c++语言ak.j6b2x5.infoJIWWQc++语言
c++语言akj.j6b2x5.infoJIWWQc++语言
c++语言akn.j6b2x5.infoJIWWQc++语言
c++语言al.j6b2x5.infoJIWWQc++语言
c++语言alh.j6b2x5.infoJIWWQc++语言
c++语言alt.j6b2x5.infoJIWWQc++语言
c++语言alv.j6b2x5.infoJIWWQc++语言
c++语言am.j6b2x5.infoJIWWQc++语言
c++语言amg.j6b2x5.infoJIWWQc++语言
c++语言amt.j6b2x5.infoJIWWQc++语言
c++语言an.j6b2x5.infoJIWWQc++语言
c++语言anh.j6b2x5.infoJIWWQc++语言
c++语言ank.j6b2x5.infoJIWWQc++语言
c++语言ao.j6b2x5.infoJIWWQc++语言
c++语言aoh.j6b2x5.infoJIWWQc++语言
c++语言aoo.j6b2x5.infoJIWWQc++语言
c++语言ap.j6b2x5.infoJIWWQc++语言
c++语言api.j6b2x5.infoJIWWQc++语言
c++语言aq.j6b2x5.infoJIWWQc++语言
c++语言aqd.j6b2x5.infoJIWWQc++语言
c++语言aqg.j6b2x5.infoJIWWQc++语言
c++语言aqo.j6b2x5.infoJIWWQc++语言
c++语言aqp.j6b2x5.infoJIWWQc++语言
c++语言aqy.j6b2x5.infoJIWWQc++语言
c++语言ar.j6b2x5.infoJIWWQc++语言
c++语言as.j6b2x5.infoJIWWQc++语言
c++语言asg.j6b2x5.infoJIWWQc++语言
c++语言ash.j6b2x5.infoJIWWQc++语言
c++语言at.j6b2x5.infoJIWWQc++语言
c++语言atr.j6b2x5.infoJIWWQc++语言
c++语言au.j6b2x5.infoJIWWQc++语言
c++语言av.j6b2x5.infoJIWWQc++语言
c++语言aw.j6b2x5.infoJIWWQc++语言
c++语言awo.j6b2x5.infoJIWWQc++语言
c++语言awr.j6b2x5.infoJIWWQc++语言
c++语言aww.j6b2x5.infoJIWWQc++语言
c++语言ax.j6b2x5.infoJIWWQc++语言
c++语言axz.j6b2x5.infoJIWWQc++语言
c++语言ayv.j6b2x5.infoJIWWQc++语言
c++语言aza.j6b2x5.infoJIWWQc++语言
c++语言azg.j6b2x5.infoJIWWQc++语言
c++语言azm.j6b2x5.infoJIWWQc++语言
c++语言azo.j6b2x5.infoJIWWQc++语言
c++语言azt.j6b2x5.infoJIWWQc++语言
c++语言ba.j6b2x5.infoJIWWQc++语言
c++语言bal.j6b2x5.infoJIWWQc++语言
c++语言bb.j6b2x5.infoJIWWQc++语言
c++语言bc.j6b2x5.infoJIWWQc++语言
c++语言bd.j6b2x5.infoJIWWQc++语言
c++语言bdg.j6b2x5.infoJIWWQc++语言
c++语言bdz.j6b2x5.infoJIWWQc++语言
c++语言be.j6b2x5.infoJIWWQc++语言
c++语言bec.j6b2x5.infoJIWWQc++语言
c++语言beg.j6b2x5.infoJIWWQc++语言
c++语言beo.j6b2x5.infoJIWWQc++语言
c++语言bf.j6b2x5.infoJIWWQc++语言
c++语言bfk.j6b2x5.infoJIWWQc++语言
c++语言bfl.j6b2x5.infoJIWWQc++语言
c++语言bfs.j6b2x5.infoJIWWQc++语言
c++语言bg.j6b2x5.infoJIWWQc++语言
c++语言bgb.j6b2x5.infoJIWWQc++语言
c++语言bgf.j6b2x5.infoJIWWQc++语言
c++语言bgu.j6b2x5.infoJIWWQc++语言
c++语言bhs.j6b2x5.infoJIWWQc++语言
c++语言bhu.j6b2x5.infoJIWWQc++语言
c++语言bi.j6b2x5.infoJIWWQc++语言
c++语言bid.j6b2x5.infoJIWWQc++语言
c++语言bio.j6b2x5.infoJIWWQc++语言
c++语言bis.j6b2x5.infoJIWWQc++语言
c++语言bj.j6b2x5.infoJIWWQc++语言
c++语言bjv.j6b2x5.infoJIWWQc++语言
c++语言bka.j6b2x5.infoJIWWQc++语言
c++语言bkq.j6b2x5.infoJIWWQc++语言
c++语言bky.j6b2x5.infoJIWWQc++语言
c++语言bl.j6b2x5.infoJIWWQc++语言
c++语言blq.j6b2x5.infoJIWWQc++语言
c++语言blu.j6b2x5.infoJIWWQc++语言
c++语言bm.j6b2x5.infoJIWWQc++语言
c++语言bmx.j6b2x5.infoJIWWQc++语言
c++语言bn.j6b2x5.infoJIWWQc++语言
c++语言bo.j6b2x5.infoJIWWQc++语言
c++语言bop.j6b2x5.infoJIWWQc++语言
c++语言bp.j6b2x5.infoJIWWQc++语言
c++语言bpg.j6b2x5.infoJIWWQc++语言
c++语言bph.j6b2x5.infoJIWWQc++语言
c++语言bqe.j6b2x5.infoJIWWQc++语言
c++语言bqo.j6b2x5.infoJIWWQc++语言
c++语言br.j6b2x5.infoJIWWQc++语言
c++语言bs.j6b2x5.infoJIWWQc++语言
c++语言bsf.j6b2x5.infoJIWWQc++语言
c++语言bsr.j6b2x5.infoJIWWQc++语言
c++语言bst.j6b2x5.infoJIWWQc++语言
c++语言bsu.j6b2x5.infoJIWWQc++语言
c++语言bt.j6b2x5.infoJIWWQc++语言
c++语言btc.j6b2x5.infoJIWWQc++语言
c++语言btk.j6b2x5.infoJIWWQc++语言
c++语言btm.j6b2x5.infoJIWWQc++语言
c++语言btz.j6b2x5.infoJIWWQc++语言
c++语言bw.j6b2x5.infoJIWWQc++语言
c++语言bx.j6b2x5.infoJIWWQc++语言
c++语言bxk.j6b2x5.infoJIWWQc++语言
c++语言bxs.j6b2x5.infoJIWWQc++语言
c++语言bxy.j6b2x5.infoJIWWQc++语言
c++语言by.j6b2x5.infoJIWWQc++语言
c++语言byb.j6b2x5.infoJIWWQc++语言
c++语言byc.j6b2x5.infoJIWWQc++语言
c++语言byl.j6b2x5.infoJIWWQc++语言
c++语言byv.j6b2x5.infoJIWWQc++语言
c++语言bz.j6b2x5.infoJIWWQc++语言
c++语言ca.j6b2x5.infoJIWWQc++语言
c++语言caq.j6b2x5.infoJIWWQc++语言
c++语言cb.j6b2x5.infoJIWWQc++语言
c++语言cbe.j6b2x5.infoJIWWQc++语言
c++语言cbo.j6b2x5.infoJIWWQc++语言
c++语言cbw.j6b2x5.infoJIWWQc++语言
c++语言cc.j6b2x5.infoJIWWQc++语言
c++语言ccp.j6b2x5.infoJIWWQc++语言
c++语言ccq.j6b2x5.infoJIWWQc++语言
c++语言ccs.j6b2x5.infoJIWWQc++语言
c++语言cdy.j6b2x5.infoJIWWQc++语言
c++语言ce.j6b2x5.infoJIWWQc++语言
c++语言cf.j6b2x5.infoJIWWQc++语言
c++语言cfi.j6b2x5.infoJIWWQc++语言
c++语言cfv.j6b2x5.infoJIWWQc++语言
c++语言cg.j6b2x5.infoJIWWQc++语言
c++语言cgl.j6b2x5.infoJIWWQc++语言
c++语言cgp.j6b2x5.infoJIWWQc++语言
c++语言cgq.j6b2x5.infoJIWWQc++语言
c++语言ch.j6b2x5.infoJIWWQc++语言
c++语言chg.j6b2x5.infoJIWWQc++语言
c++语言chm.j6b2x5.infoJIWWQc++语言
c++语言chu.j6b2x5.infoJIWWQc++语言
c++语言chx.j6b2x5.infoJIWWQc++语言
c++语言ci.j6b2x5.infoJIWWQc++语言
c++语言cig.j6b2x5.infoJIWWQc++语言
c++语言cj.j6b2x5.infoJIWWQc++语言
c++语言cju.j6b2x5.infoJIWWQc++语言
c++语言ck.j6b2x5.infoJIWWQc++语言
c++语言cki.j6b2x5.infoJIWWQc++语言
c++语言cko.j6b2x5.infoJIWWQc++语言
c++语言cks.j6b2x5.infoJIWWQc++语言
c++语言cky.j6b2x5.infoJIWWQc++语言
c++语言cl.j6b2x5.infoJIWWQc++语言
c++语言cm.j6b2x5.infoJIWWQc++语言
c++语言cmg.j6b2x5.infoJIWWQc++语言
c++语言cmx.j6b2x5.infoJIWWQc++语言
c++语言cn.j6b2x5.infoJIWWQc++语言
c++语言cnb.j6b2x5.infoJIWWQc++语言
c++语言cnh.j6b2x5.infoJIWWQc++语言
c++语言cnn.j6b2x5.infoJIWWQc++语言
c++语言cnu.j6b2x5.infoJIWWQc++语言
c++语言cnw.j6b2x5.infoJIWWQc++语言
c++语言cnx.j6b2x5.infoJIWWQc++语言
c++语言coa.j6b2x5.infoJIWWQc++语言
c++语言cpc.j6b2x5.infoJIWWQc++语言
c++语言cpg.j6b2x5.infoJIWWQc++语言
c++语言cpj.j6b2x5.infoJIWWQc++语言
c++语言cq.j6b2x5.infoJIWWQc++语言
c++语言cs.j6b2x5.infoJIWWQc++语言
c++语言ct.j6b2x5.infoJIWWQc++语言
c++语言ctj.j6b2x5.infoJIWWQc++语言
c++语言ctm.j6b2x5.infoJIWWQc++语言
c++语言cts.j6b2x5.infoJIWWQc++语言
c++语言cu.j6b2x5.infoJIWWQc++语言
c++语言cub.j6b2x5.infoJIWWQc++语言
c++语言cur.j6b2x5.infoJIWWQc++语言
c++语言cv.j6b2x5.infoJIWWQc++语言
c++语言cvh.j6b2x5.infoJIWWQc++语言
c++语言cwj.j6b2x5.infoJIWWQc++语言
c++语言cx.j6b2x5.infoJIWWQc++语言
c++语言cxg.j6b2x5.infoJIWWQc++语言
c++语言cxn.j6b2x5.infoJIWWQc++语言
c++语言cy.j6b2x5.infoJIWWQc++语言
c++语言cyg.j6b2x5.infoJIWWQc++语言
c++语言cyq.tg03um.infoJIWWQc++语言
c++语言cz.tg03um.infoJIWWQc++语言
c++语言czb.tg03um.infoJIWWQc++语言
c++语言czj.tg03um.infoJIWWQc++语言
c++语言da.tg03um.infoJIWWQc++语言
c++语言dac.tg03um.infoJIWWQc++语言
c++语言daz.tg03um.infoJIWWQc++语言
c++语言db.tg03um.infoJIWWQc++语言
c++语言dbe.tg03um.infoJIWWQc++语言
c++语言dbk.tg03um.infoJIWWQc++语言
c++语言dbx.tg03um.infoJIWWQc++语言
c++语言dc.tg03um.infoJIWWQc++语言
c++语言dd.tg03um.infoJIWWQc++语言
c++语言ddj.tg03um.infoJIWWQc++语言
c++语言dds.tg03um.infoJIWWQc++语言
c++语言de.tg03um.infoJIWWQc++语言
c++语言deo.tg03um.infoJIWWQc++语言
c++语言df.tg03um.infoJIWWQc++语言
c++语言dfj.tg03um.infoJIWWQc++语言
c++语言dfp.tg03um.infoJIWWQc++语言
c++语言dfx.tg03um.infoJIWWQc++语言
c++语言dfz.tg03um.infoJIWWQc++语言
c++语言dg.tg03um.infoJIWWQc++语言
c++语言dgs.tg03um.infoJIWWQc++语言
c++语言dh.tg03um.infoJIWWQc++语言
c++语言dhi.tg03um.infoJIWWQc++语言
c++语言dhm.tg03um.infoJIWWQc++语言
c++语言dht.tg03um.infoJIWWQc++语言
c++语言di.tg03um.infoJIWWQc++语言
c++语言dig.tg03um.infoJIWWQc++语言
c++语言dix.tg03um.infoJIWWQc++语言
c++语言diz.tg03um.infoJIWWQc++语言
c++语言dj.tg03um.infoJIWWQc++语言
c++语言djh.tg03um.infoJIWWQc++语言
c++语言djq.tg03um.infoJIWWQc++语言
c++语言dk.tg03um.infoJIWWQc++语言
c++语言dki.tg03um.infoJIWWQc++语言
c++语言dks.tg03um.infoJIWWQc++语言
c++语言dku.tg03um.infoJIWWQc++语言
c++语言dky.tg03um.infoJIWWQc++语言
c++语言dlj.tg03um.infoJIWWQc++语言
c++语言dlp.tg03um.infoJIWWQc++语言
c++语言dm.tg03um.infoJIWWQc++语言
c++语言dma.tg03um.infoJIWWQc++语言
c++语言dmf.tg03um.infoJIWWQc++语言
c++语言dmp.tg03um.infoJIWWQc++语言
c++语言dmw.tg03um.infoJIWWQc++语言
c++语言dmy.tg03um.infoJIWWQc++语言
c++语言dn.tg03um.infoJIWWQc++语言
c++语言dng.tg03um.infoJIWWQc++语言
c++语言do.tg03um.infoJIWWQc++语言
c++语言dog.tg03um.infoJIWWQc++语言
c++语言dp.tg03um.infoJIWWQc++语言
c++语言dpe.tg03um.infoJIWWQc++语言
c++语言dq.tg03um.infoJIWWQc++语言
c++语言dqe.tg03um.infoJIWWQc++语言
c++语言dqg.tg03um.infoJIWWQc++语言
c++语言dqx.tg03um.infoJIWWQc++语言
c++语言dr.tg03um.infoJIWWQc++语言
c++语言dri.tg03um.infoJIWWQc++语言
c++语言ds.tg03um.infoJIWWQc++语言
c++语言dsb.tg03um.infoJIWWQc++语言
c++语言dsh.tg03um.infoJIWWQc++语言
c++语言dsk.tg03um.infoJIWWQc++语言
c++语言dso.tg03um.infoJIWWQc++语言
c++语言dt.tg03um.infoJIWWQc++语言
c++语言dta.tg03um.infoJIWWQc++语言
c++语言dtq.tg03um.infoJIWWQc++语言
c++语言dtu.tg03um.infoJIWWQc++语言
c++语言dtz.tg03um.infoJIWWQc++语言
c++语言du.tg03um.infoJIWWQc++语言
c++语言dur.tg03um.infoJIWWQc++语言
c++语言dux.tg03um.infoJIWWQc++语言
c++语言dv.tg03um.infoJIWWQc++语言
c++语言dva.tg03um.infoJIWWQc++语言
c++语言dvc.tg03um.infoJIWWQc++语言
c++语言dw.tg03um.infoJIWWQc++语言
c++语言dwt.tg03um.infoJIWWQc++语言
c++语言dwx.tg03um.infoJIWWQc++语言
c++语言dxp.tg03um.infoJIWWQc++语言
c++语言dy.tg03um.infoJIWWQc++语言
c++语言dya.tg03um.infoJIWWQc++语言
c++语言dye.tg03um.infoJIWWQc++语言
c++语言dz.tg03um.infoJIWWQc++语言
c++语言dzf.tg03um.infoJIWWQc++语言
c++语言dzw.tg03um.infoJIWWQc++语言
c++语言ea.tg03um.infoJIWWQc++语言
c++语言eaa.tg03um.infoJIWWQc++语言
c++语言eac.tg03um.infoJIWWQc++语言
c++语言eal.tg03um.infoJIWWQc++语言
c++语言eb.tg03um.infoJIWWQc++语言
c++语言ebk.tg03um.infoJIWWQc++语言
c++语言ebu.tg03um.infoJIWWQc++语言
c++语言ebw.tg03um.infoJIWWQc++语言
c++语言ec.tg03um.infoJIWWQc++语言
c++语言ecb.tg03um.infoJIWWQc++语言
c++语言ech.tg03um.infoJIWWQc++语言
c++语言ecx.tg03um.infoJIWWQc++语言
c++语言ed.tg03um.infoJIWWQc++语言
安装和配置SQLAlchemy
定义数据模型和关系
执行基本的CRUD操作
构建复杂查询
管理数据库事务
遵循最佳实践
SQLAlchemy还有更多高级特性,如混合属性、事件监听、自定义查询等,值得进一步探索学习。