Как использовать фильтры в SQLAlchemy ORM?

Пользователь

от jerrold_langworth , в категории: Python , 2 месяца назад

Как использовать фильтры в SQLAlchemy ORM?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от jett , 20 дней назад

@jerrold_langworth 

Фильтры в SQLAlchemy ORM используются для выборки данных из базы данных, удовлетворяющих определенным условиям. Для использования фильтров в SQLAlchemy ORM используется метод filter() или его более продвинутая версия filter_by().


Простой пример использования фильтра:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///example.db')
Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

Base.metadata.create_all(engine)

# Добавляем несколько записей
session.add_all([
    User(name='John', age=25),
    User(name='Alex', age=30),
    User(name='Bob', age=22)
])
session.commit()

# Выбираем всех пользователей старше 23 лет
users = session.query(User).filter(User.age > 23).all()
for user in users:
    print(user.name)


В этом примере мы создали таблицу пользователей и добавили несколько записей. Затем мы выбрали всех пользователей старше 23 лет с помощью метода filter().


Можно использовать и комбинации фильтров, например:

1
2
3
4
# Выбираем всех пользователей младше 30 лет и с именем, начинающимся на "B"
users = session.query(User).filter(User.age < 30, User.name.like('B%')).all()
for user in users:
    print(user.name)


Этот пример выбирает всех пользователей младше 30 лет и с именем, начинающимся на "B", используя комбинацию фильтров.


Также можно использовать метод filter_by(), который принимает аргументы в виде именованных параметров:

1
2
3
4
# Выбираем всех пользователей с именем "John"
users = session.query(User).filter_by(name='John').all()
for user in users:
    print(user.name)


В этом примере мы выбираем всех пользователей с именем "John", используя метод filter_by().