SQLAlchemy

安装
pip install sqlalchemy
基本使用
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# 创建连接引擎
engine = create_engine('postgresql://username:password@localhost:5432/mydatabase')

# 创建基类
Base = declarative_base()

# 定义模型
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)

    def __repr__(self):
        return f'<User(name={self.name}, fullname={self.fullname}, password={self.password})>'

# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

# 创建新记录
new_user = User(name='john', fullname='John Doe', password='secret')

# 添加记录
session.add(new_user)

# 提交事务
session.commit()

使用基础模型来定义一些共用的属性
from datetime import datetime

from sqlalchemy import Column, Integer, DateTime
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()


class BaseModel(Base):
    # 特殊属性,用于标记一个模型是否为抽象模型
    # 如果一个模型被标记为抽象模型,则 SQLAlchemy 在创建表的时候不会为该模型创建对应的数据库表。
    # 也就是说,抽象模型仅用于作为其他模型的基类,不能直接对应数据库表。
    __abstract__ = True
    id = Column(Integer, primary_key=True, autoincrement=True)
    create_time = Column(DateTime, nullable=False, default=datetime.now)
    update_time = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now)

查询
# 创建查询对象query()
'''
参数:ORM模型类的名称 比如:User
返回值:Query对象
说明:Query 对象是 SQLAlchemy ORM 中用来表示查询的对象。使用 query() 方法创建出来的 Query 对象是一个可构建的查询,通常用来从数据库中检索数据。
通常,我们会在 Query 对象上使用各种方法来指定查询的条件、过滤器、排序规则等。
'''
session.query(User)

# 过滤数据filter()
'''
参数:接受的参数是一个表达式。
返回值:新的Query对象
说明:filter() 和 filter_by() 的区别是 filter_by 比较适用于快速构造简单的过滤条件,而 filter 则可以用来构造更复杂的过滤条件,
例如使用逻辑运算符。例如:query.filter(or_(User.name == 'Alice', User.name == 'Bob'))
'''
session.query(User).filter(User.name == 'Alice')


# 过滤数据filter_by()
'''
参数:接受的参数是一个关键字参数列表,其中的关键字是属性名,对应的值是过滤条件。例如:
返回值:新的Query对象
'''
session.query(User).filter_by(name='Alice')

# 过滤数据limit()
'''
参数:整型
返回值:新的Query对象
说明:最多返回几条数据。
'''
session.query(User).limit(2) 

# 过滤数据offset()
'''
参数:整型
返回值:新的Query对象
说明:用于设置偏移(即跳过)的行数。
'''
session.query(User).offset(2)

# 过滤数据order_by()
'''
参数:一个或多个参数,这些参数可以是模型类的属性或表达式
返回值:新的Query对象
说明:用于对查询结果进行排序
'''
from sqlalchemy import desc
'''按 "name" 字段升序排序'''
session.query(Model).order_by(Model.name)
'''按 "name" 字段降序排序'''
session.query(Model).order_by(desc(Model.name))

# 执行查询 all()
'''
参数:
返回值:返回的是一个列表
说明:用于返回查询的所有结果
'''
'''查询 users 表中所有用户'''
users = session.query(User).all()

# 执行查询 one()
'''
参数:
返回值:返回查询的第一个结果,如果查询有多个结果或者没有结果,会抛出异常。
说明:
'''
'''查询 users 表中 id 为 1 的用户'''
user = session.query(User).filter(User.id == 1).one()

# 执行查询 first()
'''
参数:
返回值:用于返回查询的第一个结果,如果查询没有结果,则返回 None。
说明:
'''
'''查询 users 表中年龄最大的用户'''
oldest_user = session.query(User).order_by(User.age.desc()).first()


# 执行查询 scalar()
'''
参数:
返回值:用于返回查询的第一个结果,但是会忽略多余的列。如果查询没有结果,则返回 None。
说明:和first()区别如果查询到很多结果,抛出sqlalchemy.orm.exc.MultipleResultsFound异常
'''
'''查询 users 表中年龄最大的用户的年龄'''
max_age = session.query(User.age).order_by(User.age.desc()).scalar()

# 执行查询 count()
'''
参数:
返回值:int
说明:用于返回查询的结果数量
'''
'''查询 users 表中男性用户的数量'''
num_male_users = session.query(User).filter(User.gender == 'male').count()

作者:miracleeeeeeee

出处:https://www.cnblogs.com/miracleeeeeeee/p/17033087.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Miracleeeeeee  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示