如何删除在 sqlalchemy 中重复的行

Posted

技术标签:

【中文标题】如何删除在 sqlalchemy 中重复的行【英文标题】:How do I delete the rows that are duplicated in sqlalchemy 【发布时间】:2021-05-24 12:14:56 【问题描述】:

我想删除具有相同文章名称(articulo)的行,或者只是如果它已经在表中,则不添加它

型号:


class MetaArt(db.Base):
    __tablename__ = 'metadata'

    id = Column(Integer, primary_key=True)
    fecha = Column(Date)
    articulo = Column(String(1000))
    autores = Column(String(1000))
    affili = Column(String(2000))
    categoria_articulo = Column(String(200))
    version = Column(String(500))
    version2 = Column(String(500))

我想运行这个 SQL 查询:

WITH articulos_repetidos AS (
    SELECT MIN(id) as id, articulo FROM metadata 
            GROUP BY articulo
            HAVING COUNT(*)>1
)
DELETE FROM metadata
    WHERE id not IN (
        SELECT id FROM articulos_repetidos
    ) and articulo IN (SELECT articulo FROM articulos_repetidos);

我的问题是如何在 SQLAlchemy 核心中构建这样的语句?

【问题讨论】:

您的问题是什么?如何运行文本语句(如上)?如何在 SQLAlchemy 核心中构造这样的语句?你试过什么?请edit澄清您的问题。 我的问题是如何在 SQLAlchemy 核心中构建这样的语句?谢谢。 【参考方案1】:
subq = (
    select(func.min(MetaArt.id).label("id"), MetaArt.articulo)
    .group_by(MetaArt.articulo)
    .having(func.count(literal("*")) > 1)
)
cte = subq.cte("articulos_repetidos")

stmt = (
    delete(MetaArt)
    .where(~MetaArt.id.in_(select(cte.c.id)))
    .where(MetaArt.articulo.in_(select(cte.c.articulo)))
)

【讨论】:

以上是关于如何删除在 sqlalchemy 中重复的行的主要内容,如果未能解决你的问题,请参考以下文章

oracle删除重复的行怎么删啊

如何从 SqlAlchemy 中的多对多集合中删除所有项目?

如何在django中删除具有重复列的行

如何安全地删除 indexPath 处的行

使用 SQLAlchemy 从反射表中删除的行

如何从文本文件中删除重复并包含某些单词的行?