Метод reverse_operate класса ColumnElement
Метод reverse_operate класса ColumnElement
создает новое выражение для обратной операции.
Он вызывается, когда Python не может выполнить
операцию напрямую, так как левый операнд
не является объектом ColumnElement.
Первым параметром метод принимает оператор,
вторым - операнды, а третьим - модификатор
обратного порядка.
Синтаксис
reverse_operate(op, other, **kwargs)
Пример
Давайте создадим простое выражение, где обычное число складывается с колонкой:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('num', Integer)
)
metadata.create_all(engine)
expr = 5 + articles.c.num
res = str(expr)
print(res)
Результат выполнения кода:
"articles.num + :num_1"
Пример
Давайте рассмотрим случай, когда строка сравнивается с колонкой через оператор равенства:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('status', String)
)
metadata.create_all(engine)
expr = 'article' == articles.c.status
res = str(expr)
print(res)
Результат выполнения кода:
"articles.status = :status_1"
Пример
Давайте получим реальный результат выполнения SQL-запроса с обратной операцией:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, insert, select
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(insert(articles), [
{'title': 'article 1', 'num': 10},
{'title': 'article 2', 'num': 20},
{'title': 'article 3', 'num': 30}
])
conn.commit()
stmt = select(articles.c.title).where(10 < articles.c.num)
res = conn.execute(stmt).fetchall()
print(res)
Результат выполнения кода:
[('article 2',), ('article 3',)]
Смотрите также
-
класс
ColumnElement,
который представляет базовый класс для выражений -
метод
operate,
который создает прямое выражение операции -
метод
op,
который создает произвольный оператор -
метод
bool_op,
который создает булев оператор