Python SQLAlchemy – func.count із фільтром
У цій статті ми побачимо, як виконати операцію фільтрування за допомогою функції count у SQLAlchemy проти бази даних PostgreSQL у python
Операції підрахунку з фільтром виконуються різними методами з використанням різних функцій. Такі типи математичних операцій залежать від бази даних. У PostgreSQL підрахунок виконується за допомогою функції count(), а операція фільтрування виконується за допомогою filter(). У SQLAlchemy такі загальні функції, як SUM, MIN, MAX, викликаються як звичайні функції SQL за допомогою атрибута func.
Деякі поширені функції, які використовуються в SQLAlchemy: count, cube, current_date, current_time, max, min, mode тощо.
Використання: func.count(). func.group_by(), func.max()
Створення таблиці для демонстрації
Імпортуйте необхідні функції з пакета SQLAlchemy. Встановіть з’єднання з базою даних PostgreSQL за допомогою функції create_engine(), як показано нижче, створіть таблицю під назвою books зі стовпцями book_id і book_price. Вставте запис у таблиці за допомогою функції insert() і values(), як показано.
Python3
# import necessary packages> import> sqlalchemy> from> sqlalchemy> import> create_engine, MetaData, Table,> Column, Numeric, Integer, VARCHAR> from> sqlalchemy.engine> import> result> > # establish connections> engine> => create_engine(> > 'database+ dialect://username:password@host:port/databasename '> )> > # initialize the Metadata Object> meta> => MetaData(bind> => engine)> MetaData.reflect(meta)> > # create a table schema> books> => Table(> > 'books'> , meta,> > Column(> 'bookId'> , Integer, primary_key> => True> ),> > Column(> 'book_price'> , Numeric),> > Column(> 'genre'> , VARCHAR),> > Column(> 'book_name'> , VARCHAR)> )> > meta.create_all(engine)> # insert records into the table> statement1> => books.insert().values(bookId> => 1> , book_price> => 12.2> ,> > genre> => 'fiction'> ,> > book_name> => 'Old age'> )> statement2> => books.insert().values(bookId> => 2> , book_price> => 13.2> ,> > genre> => 'non-fiction'> ,> > book_name> => 'Saturn rings'> )> statement3> => books.insert().values(bookId> => 3> , book_price> => 121.6> ,> > genre> => 'fiction'> ,> > book_name> => 'Supernova'> )> statement4> => books.insert().values(bookId> => 4> , book_price> => 100> ,> > genre> => 'non-fiction'> ,> > book_name> => 'History of the world'> )> statement5> => books.insert().values(bookId> => 5> , book_price> => 1112.2> ,> > genre> => 'fiction'> ,> > book_name> => 'Sun city'> )> > # execute the insert records statement> engine.execute(statement1)> engine.execute(statement2)> engine.execute(statement3)> engine.execute(statement4)> engine.execute(statement5)> |
Вихід:
Зразок таблиці
Реалізація GroupBy та count у SQLAlchemy
Процедура написання функції groupby дещо відрізняється від процедури звичайного SQL-запиту, яка показана нижче
sqlalchemy.select([
Tablename.c.column_name,
sqlalchemy.func.count(Tablename.c.column_name)
]).group_by(Tablename.c.column_name).filter(Tablename.c.column_name значення)
Отримайте таблицю книг з об’єкта метаданих, ініціалізованого під час підключення до бази даних. Передайте SQL-запит у функцію execute() і отримайте всі результати за допомогою функції fetchall(). Використовуйте цикл for для перегляду результатів.
Наведений нижче запит повертає кількість книг різних жанрів, ціни яких вищі за рупій. 50.
Python3
# Get the `books` table from the Metadata object> BOOKS> => meta.tables[> 'books'> ]> > # SQLAlchemy Query to GROUP BY and filter function> query> => sqlalchemy.select([> > BOOKS.c.genre,> > sqlalchemy.func.count(BOOKS.c.genre)> ]).group_by(BOOKS.c.genre).> filter> (BOOKS.c.book_price>> 50.0> )> > # Fetch all the records> result> => engine.execute(query).fetchall()> > # View the records> for> record> in> result:> > print> (> '
'> , record)> |
Вихід:
Результат функції підрахунку та фільтрування