La siguiente consulta devuelve elementos duplicados en table cuyos valores
para las columnas column_1 y column_2 son idénticos:
SELECT column_1, column_2, COUNT(*) FROM my_table
GROUP BY column_1, column_2
HAVING count(*) > 1;
Usando esta consulta, podríamos borrar todos los elementos duplicados de forma automática mediante esta otra consulta:
DELETE FROM my_table AS main
USING (
SELECT column_1, column_2, COUNT(*) FROM my_table
GROUP BY (column_1, column_2)
HAVING COUNT(*) > 1
) AS duplicates
WHERE main.column_1 = duplicates.column_1
AND main.column_2 = duplicates.column_2;
SQLAlchemy
Esta misma consulta se puede hacer mediante SQLAlchemy de la siguiente forma:
session.execute(
select(
my_table.column_1,
my_table.column_2,
func.count(my_table.id).label("count")
).from(my_table).group_by(my_table.column_1).having(
func.count(my_table.id)
).all()