2009-03-04 4 views
1

Использование pysqlite, как можно использовать пользовательский тип в качестве значения в сравнении, e. g: "... WHERE columnName> userType"?pysqlite user types in select statement

Например, я определил тип bool с необходимой регистрацией, конвертером и т. Д. Pysqlite/Sqlite отвечает как ожидалось для операций INSERT и SELECT (bool «True» хранится как целое число 1 и возвращается как True).

Но это не удается, когда bool используется в «SELECT * из задач WHERE display = True» или «... WHERE display =« True ». «В первом случае Sqlite сообщает об ошибке, что нет столбца с именем« Истина ». А во втором случае записи не возвращаются. Выбор работает, если вместо True используется 1. Кажется, у меня такая же проблема, когда вы используете собственные даты и временные адаптеры pysqlite.

Я могу обойти это поведение для этого и других пользовательских типов, но это не так весело. Я хотел бы знать, является ли использование заданного пользователем типа в запросе или не возможно, чтобы я не ударял головой о эту конкретную стену.

спасибо.

ответ

0

Возможно, вам необходимо направить его на правильный тип. Попробуйте «SELECT * FROM tasks WHERE (display = CAST (« True »AS bool)».

+0

спасибо, я попробую это – Strider1066

1

Использовать правильный способ передачи переменных в запросы: Не строите запрос, используйте вопросительные знаки и передавайте параметры в виде кортежа в execute().

myvar = True 
cur.execute('SELECT * FROM tasks WHERE display = ?', (myvar,)) 

Это способ, SQLite водитель будет использовать значение непосредственно. Больше не требуется ускользать, цитирование, преобразование.

Используйте этот метод для каждого параметра, даже строки, целого и т. Д. Таким образом, вы избегаете SQL-инъекции автоматически.

+0

спасибо, я попробую это – Strider1066

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

  • Нет связанных вопросов^_^