Как переписать SQL запрос для использования в библиотеке SQLAlchemy?

Как устранить ошибку sqlalchemy.exc.ArgumentError: SQL expression for WHERE/HAVING role expected, got (, ) при использовании sqlAlchemy в вашем коде Python?
  • 16 апреля 2024 г. 12:29
Ответы на вопрос 2
1. Для переписывания SQL запроса для использования в библиотеке SQLAlchemy, вы можете использовать объекты и методы SQLAlchemy для построения запроса. Например, вместо написания SQL запроса в виде строки, вы можете создать объект запроса, используя методы `query` и `filter`.

Пример:

SQL запрос:
```sql
SELECT * FROM users WHERE age > 18;
```

SQLAlchemy запрос:
```python
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData

engine = create_engine('sqlite:///:memory:')
metadata = MetaData()

users = Table('users', metadata,
              Column('id', Integer, primary_key=True),
              Column('name', String),
              Column('age', Integer))

# Создание объекта запроса с фильтром
query = users.select().where(users.c.age > 18)

# Выполнение запроса
result = engine.execute(query)

for row in result:
    print(row)
```

2. Ошибка `sqlalchemy.exc.ArgumentError: SQL expression for WHERE/HAVING role expected, got (, )` часто возникает при передаче неверных аргументов в метод `filter` или `filter_by` в SQLAlchemy. Убедитесь, что вы передаете правильное выражение SQLAlchemy в эти методы.

Примеры неправильных аргументов:
```python
# Неправильное использование filter с недопустимым выражением
query = users.filter(users.c.age, 18)

# Неправильное использование filter_by с недостающим значением
query = users.filter_by(age=18, name)
```

Используйте подходящие выражения SQLAlchemy в методах `filter` и `filter_by`, чтобы избежать данной ошибки.
По-моему, у тебя перепутаны скобки в stmt = ... 
stmt = select(Book).where(
  or_(
    Book.name.ilike(":message")
  ),   # тут or_ закончился
  (  # а тут уже фз что пошло...
    Book.author_name.ilike(":message"), 
    (
      Book.author_lastname.ilike(":message")
    )
  )
)  # тут закончился where
Похожие вопросы