一、安装
pip install sqlalchemy
二、连接数据库
from sqlalchemy import create_engine
#MySQL 数据库为例,数据库名为 mydb,用户名为 user,密码为 password,主机为 localhost,端口为port
engine = create_engine('mysql+pymysql://user:password@localhost:port/mydb')
其中端口号port查询:mysql默认端口3306,如修改过请输入
SHOW VARIABLES LIKE 'port';
三、定义数据模型
使用 SQLAlchemy 的 declarative_base
创建一个基类,然后基于此定义你的数据模型类。
from sqlalchemy.orm import declarative_base
from sqlalchemy import create_engine,Column,Integer,String,Float
Base = declarative_base()
class User(Base):
__tablename__ = 'user' #表名user
id = Column(Integer, primary_key=True) #列名id,类型integer
name = Column(String(255)) #列名name,类型string
age = Column(Integer)
money = Column(Float)
四、创建表
engine = create_engine('mysql+pymysql://user:password@localhost:port/mydb')
#若表不存在,则新建一个
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine) # 与数据库引擎进行连接绑定
session = Session() # 创建数据库会话对象
五、插入数据
from sqlalchemy.orm import sessionmaker
user = User(name='张三', age=20,money=101.11)
session.add(user) #添加
session.commit() #提交操作
六、查询数据
6.1 基本查询
6.1.1 查询全部
users = session.query(User).all()
for user in users:
print(user.name, user.age, user.money)
6.1.2 查询特定列
# 只查询用户的姓名和年龄
results = session.query(User.name, User.age).all()
for result in results:
print(result.name, result.age)
6.2 条件查询
6.2.1 使用过滤条件
# 查询年龄大于 18 的用户
older_users = session.query(User).filter(User.age > 18).all()
6.2.2 多条件查询
users_in_age_range = session.query(User).filter(User.age >= 18, User.age <= 30).all()
6.2.3 复合条件查询
from sqlalchemy import or_
# 允许使用关系代词 or_ 和 and_
special_users = session.query(User).filter(or_(User.age < 18, User.name == '张三')).all()
6.2.4 模糊查询
# 使用 link 可以进行模糊查询
users_with_name_pattern = session.query(User).filter(User.name.like('%张%')).all()
6.3 排序
6.3.1 按升序排序
# 按照年龄升序排列查询用户
sorted_users_by_age_asc = session.query(User).order_by(User.age).all()
6.3.2 按降序排序
# 按照年龄降序排列查询用户
sorted_users_by_age_desc = session.query(User).order_by(User.age.desc()).all()
6.4 分页查询
使用 limit 和 offset 实现分页
# 查询第 2 页数据,每页显示 10 条记录
page = 2
per_page = 10
users_on_page_2 = session.query(User).offset((page - 1) * per_page).limit(per_page).all()
6.5 聚合操作
6.5.1 统计数量
# 查询用户的总数
from sqlalchemy import func
total_users = session.query(func.count(User.id)).scalar()
6.5.2 计算平均值
# 计算用户年龄的平均值
average_age = session.query(func.avg(User.age)).scalar()
6.5.3 计算用户年龄的总和
# 计算用户年龄的总和
total_age_sum = session.query(func.sum(User.age)).scalar()
6.6 关联查询
假设 User 类中有一个与 Order 类关联的属性 orders
# 查询某个用户的所有订单:
user = session.query(User).filter(User.id == some_user_id).first()
if user:
orders = user.orders
for order in orders:
print(order.id, order.details)
七、更新数据
user = session.query(User).filter_by(name='张三').first()
user.name='李四'
user.age = 21
user.money=110.99
session.commit() #缺少commit则修改不生效
八、删除数据
user = session.query(User).filter_by(name='张三').first()
session.delete(user)
session.commit() #缺少commit则修改不生效
(ps:整理不易,有用点赞)