Метод unique
Метод unique класса Result возвращает итератор по строкам результата запроса. При этом для каждой строки применяется стратегия уникальности. По умолчанию используется стратегия "unique", которая фильтрует полностью совпадающие строки, оставляя только первое вхождение. Метод особенно полезен при работе с объединениями и отношениями joinedload, где могут появляться дублирующиеся строки. Метод не принимает обязательных параметров и возвращает объект итератора, который можно использовать в цикле for.
Синтаксис
result.unique()
Пример
Давайте создадим таблицу и получим результат, содержащий дублирующиеся строки, а затем применим метод unique:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
conn.execute(text("INSERT INTO articles VALUES (1, 'article'), (1, 'article'), (2, 'article')"))
res = conn.execute(text('SELECT * FROM articles'))
for row in res.unique():
print(row)
Результат выполнения кода:
(1, 'article')
(2, 'article')
Пример
Давайте применим метод unique к результату с дублирующимися строками и выведем количество уникальных строк:
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)'))
conn.execute(text("INSERT INTO articles VALUES (1, 'article'), (1, 'article'), (2, 'article')"))
res = conn.execute(text('SELECT * FROM articles'))
unique_rows = list(res.unique())
print(len(unique_rows))
Результат выполнения кода:
2