2014-11-20 7 views
0

Я нашел в документации peewee how to create custom collations, но мне не удалось найти, как использовать the built-in sqlite collating sequences.Использование COLLATE для запросов peewee

Хо, создаю ли я следующий вопрос в peewee (он является последним на вышеупомянутой странице документации sqlite)?

SELECT x FROM t1 ORDER BY c COLLATE NOCASE, x; 

И как указать сортировку для индекса?

CREATE INDEX i1 ON t1(f1 COLLATE NOCASE); 

EDIT

Ответ от coleifer рассматривается вопрос о запросе.

Для создания индекса я использую следующий трюк, который хорошо работает при создании индексов только один раз при запуске (например, в моем приложении).

Нечувствительный к регистру уникальный индекс в двух столбцах таблицы LockedFiles предотвращает дублирование записей.

class LockedFiles(PeeweeModel): 
    folder = peewee.CharField(index=True) 
    file = peewee.CharField(index=True) 

    @classmethod 
    def custom_init(cls): 
     db.execute_sql('create unique index if not exists lockedfiles_unique ' 
         'on lockedfiles(folder collate nocase, file collate nocase)', {}) 

def create_tables(drop_existing_tables): 

    for table in [LockedFiles, Model2, Model3]: 

     if drop_existing_tables: 
      table.drop_table(True) 

     table.create_table(True) 

     try: 
      table.custom_init() 
     except: 
      pass 

create_tables(drop_existing_tables=False) 

ответ

1

Вы можете задать параметры сортировки по наращивая условие SQL, и передавая ее order_by().

Например:

collated = Clause(MyModel.field, SQL('COLLATE NOCASE')) 
MyModel.select().order_by(collated, MyModel.other_field) 

Для индекса, к сожалению, вам нужно будет создать это вручную, как PeeWee не знает, как добавить информацию сортировки в SQL CREATE INDEX. Если вы хотите открыть запрос на pull, я бы определенно рассмотрел возможность слияния этой функции.

+0

Я все еще застрял в части запроса. Я уже нашел обходное решение для части индекса. Я редактировал сообщение с подробностями. – stenci

Смежные вопросы