📜  sqlalchemy 过滤器或 - SQL (1)

📅  最后修改于: 2023-12-03 15:05:19.698000             🧑  作者: Mango

SQLAlchemy 过滤器或 - SQL

简介

SQLAlchemy 是一个基于 Python 的 ORM(Object Relationship Mapping)框架,可以用来提高开发效率。在 SQLAlchemy 中,可以通过使用过滤器和 SQL 语句来实现数据的筛选和过滤。

过滤器

过滤器是 SQLAlchemy 中的一个非常有用的特性。使用过滤器可以方便地筛选和过滤数据,避免了手写 SQL 语句的繁琐和复杂。

过滤器包括:

  • filter: 用来设置筛选条件;
  • filter_by: 用来设置筛选条件(通过键值对的方式);
  • limit: 用来限制查询结果的个数;
  • offset: 用来设置查询结果偏移的位置;
  • order_by: 用来设置查询结果的排序方式;
  • group_by: 用来设置 SQL 的 group by 语句;
  • having: 用来设置 SQL 的 having 语句。
SQL

在 SQLAlchemy 中,可以直接使用 SQL 语句来操作数据库。SQLAlchemy 将 SQL 语句封装成了 SQLAlchemy 的语法,同时支持原生的 SQL 语句。在使用 SQL 语句时,需要注意 SQL 语句的正确性和安全性问题。

代码示例
过滤器示例
from sqlalchemy import create_engine, Column, Integer, String, DateTime, text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()


class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    name = Column(String(255))
    email = Column(String(255))
    created_at = Column(DateTime, server_default=text('CURRENT_TIMESTAMP'))
    updated_at = Column(DateTime, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'))


engine = create_engine('mysql+pymysql://username:password@localhost:3306/dbname')
Session = sessionmaker(bind=engine)
session = Session()

# 使用 filter 语句进行数据查询
results = session.query(User).filter(User.name == 'Tom').all()

# 使用 filter_by 语句进行数据查询
results = session.query(User).filter_by(name='Tom').all()

# 使用 limit 语句限制查询结果的个数
results = session.query(User).limit(10).all()

# 使用 offset 语句设置查询结果偏移的位置
results = session.query(User).offset(10).all()

# 使用 order_by 语句设置查询结果的排序方式
results = session.query(User).order_by(User.id.desc()).all()

# 使用 group_by 语句设置 SQL 的 group by 语句
results = session.query(User.name).group_by(User.name).all()

# 使用 having 语句设置 SQL 的 having 语句
results = session.query(User.name).group_by(User.name).having(text('count(name) > 1')).all()
SQL 示例
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData

metadata = MetaData()
engine = create_engine('mysql+pymysql://username:password@localhost:3306/dbname')

# 创建一个表对象
users = Table('users', metadata,
              Column('id', Integer, primary_key=True),
              Column('name', String(255)),
              Column('email', String(255))
              )

# 执行 SQL 插入数据操作
with engine.connect() as conn:
    conn.execute(users.insert().values(name='Tom', email='tom@example.com'))

# 执行 SQL 查询数据操作
with engine.connect() as conn:
    results = conn.execute(users.select().where(users.c.name == 'Tom'))
    for row in results:
        print(row)
总结

通过本文的介绍,我们了解了 SQLAlchemy 中的过滤器和 SQL 语句的使用方法。在实际开发中,可以根据具体需求选择适合的方式来实现对数据的筛选和操作。