Допустим, у меня есть база данных, полная Tag
объектов.Каждый Tag
имеет id
и name
.В начале создания базы данных я учел регистр Tags
с учетом регистра, однако позже я понял, что мне не нужна / не нужна эта возможность, поэтому я начал вводить каждый name
в нижний регистр перед сохранением Tag
.
Теперь у меня есть все эти различные names
остатки, которые теперь будут храниться в том же Tag
, но раньше их не было.Например,
Trendy, trendy
NotHalfBad, Nothalfbad, nothalfbad
SQL, sql, Sql
Я использую Python и SQLAlchemy.Я создал функцию для очистки этого беспорядка, которая выглядит примерно так:
todelete = []
for t1 in Session.query(Tag):
if t1 not in todelete: # If we haven't already encountered this tag
for t2 in Session.query(Tag).filter_by(name_insensitive=t1.name):
if t1.id != t2.id:
merge(t1,t2) # Calls a function I made that merges the two tags
todelete.append(tag)
Session.commit()
# Mark everything for deletion
for tag in todelete:
Session.delete(tag)
# Now commit the deletes
Session.commit()
Это ужасно неэффективно.Есть ли лучший способ?