Так что любые советы / инструкции по этому поводу
оценили. Я уже изучала
документы для create_collation и т. д., но я
не смог найти полезных примеров для
"новички".
Чтобы создать сопоставление с sqlite3
, вам нужна функция, которая работает как C's strcmp
.
def stricmp(str1, str2):
str1 = str1.lower()
str2 = str2.lower()
if str1 == str2:
return 0
elif str1 < str2:
return -1
else:
return 1
db = sqlite3.connect(':memory:')
# SQLite's default NOCASE collation is ASCII-only
# Override it with a (mostly) Unicode-aware version
db.create_collation('NOCASE', stricmp)
Обратите внимание, что хотя это сопоставление будет корректно обрабатывать 'ü' == 'Ü'
, оно все равно будет иметь 'ü' > 'v'
, поскольку буквы по-прежнему сортируются в порядке кодировки Unicode после свертывания регистра. Написание дружественной немецкой функции сортировки оставлено читателю в качестве упражнения. Или лучше - автору существующей библиотеки Unicode.
Кроме того, если бы это было возможно, я бы
хотел бы знать, как применять
необходимые модификации уже
существующие таблицы!
Вам нужно изменить БД, только если у вас есть индекс, который использует переопределение, которое вы переопределили. Drop
этот индекс и повторно create
это.
Обратите внимание, что любой столбец с ограничением UNIQUE
(или PRIMARY KEY
) будет иметь неявный индекс.