Как с помощью flask_sqlalchemy реализовать логическое ИЛИ?
Возник такой вопрос: Во flask приложении нужно реализовать запрос к БД примерно следующего вида: SELECT ALL FROM table WHERE firstUserID LIKE X OR secondUserID LIKE X. Дело в том, что во flask версии sqlalchemy нет функции or_ (или я не знаю как ее импортировать/вызывать). Данная функция есть в полноценной версии sqlalchemy, однако с ней приложение не заводится, а через flask_sqlalchemy можно реализовать только логический AND. Если кто то сталкивался с подобным вопросом и смог его решить, прошу совета. Не очень хочется делать два запроса к БД вместо одного.
Запросы создаю примерно следующим образом:
User.query.filter(User.login == login).all()
где login - переменная строчного типа, а User - класс, наследующийся от SQLAlchemy.Model и задающий таблицу в БД.
Ответы (1 шт):
Вместо функции or_ из sqlalchemy можете использовать оператор |:
User.query.filter((User.email == email) | (User.login == login)).all()
Пример:
# app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'url_or_path/to/database'
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50), unique=True)
name = db.Column(db.String(30))
class UserQuery(object):
@staticmethod
def get_user_id_by_email_or_name(email=None, name=None):
user = User.query.filter((User.email == email) | (User.name == name)).first()
return user.id if hasattr(user, 'id') else None
Refs: