02-python-数据库-sqlalchemy

一、安装

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:整理不易,有用点赞)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值