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

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

от jerrold_langworth , в категории: Python , год назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от jett , год назад

@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().

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

от shirley.vonrueden , 3 месяца назад

@jerrold_langworth 

Дополнительно, в SQLAlchemy ORM также можно использовать другие методы для фильтрации данных, такие как методы like(), ilike() для поиска по частичному совпадению, метод in_() для поиска значений в списке и другие. Например:

1
2
3
4
# Используем метод like() для поиска имен, содержащих подстроку "ob"
users = session.query(User).filter(User.name.like('%ob%')).all()
for user in users:
    print(user.name)


Также можно комбинировать различные методы фильтрации для более сложных запросов к базе данных. Например:

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


Таким образом, фильтры в SQLAlchemy ORM позволяют гибко выбирать данные из базы данных, уточняя условия отбора и комбинируя различные методы для сложных запросов.