如何删除在 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 中重复的行的主要内容,如果未能解决你的问题,请参考以下文章