SQLAlchemy:合并重复标记的有效方法

2024-09-26 22:54:24 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个装满Tag对象的数据库。每个Tag都有一个id和一个name。在创建数据库的一开始,我允许使用区分大小写的Tags,但是,后来我意识到我不需要/不需要这个功能,所以我开始在存储Tag之前强制每个name小写。在

现在我有了所有这些不同的names的残片,它们现在将被存储在同一个Tag下,但以前没有

Trendy, trendy
NotHalfBad, Nothalfbad, nothalfbad
SQL, sql, Sql

我正在使用Python和SQLAlchemy。我创建了一个函数来清理这个混乱,它看起来像这样:

^{pr2}$

这是非常低效的。有更好的方法吗?在


Tags: 对象name功能id数据库namestagtags
1条回答
网友
1楼 · 发布于 2024-09-26 22:54:24

如果是一次性使用的工具,你真的要关心效率吗?让它运行一分钟(或几分钟),而不是花更多的时间来优化它。在

也就是说,查询比Python循环更昂贵,因此首先将所有标记加载到一个列表中,然后在该列表上循环两次,应该可以加快速度:

for t1 in tags:
    if t1 not in todelete:
        for t2 in tags:
            if t2.name_insensitive == t1.name:
                merge(t1,t2)
                todelete.append(tag)

另外,删除循环中的commit调用。这不仅代价高昂,而且如果其他进程更改了数据库,则循环的标记列表可能会不同步。在

当然,让事情变得更有效率的一个恰当的方法是先进行分析,然后集中精力解决具体问题。如果你对表现很认真的话就应该这么做。在

相关问题 更多 >

    热门问题