Столкнулся с проблемой при использовании Django и MySQL, которую подробно описал на созданном для этого баг тикете. В кратце, если вы захотите минуя ORM сделать запрос к БД вида (ключевым моментом здесь является использование знака % в значении оператора):
from django.db import connection
...
cursor=connection.cursor()
cursor.execute('SELECT * from `test`.`test_table` WHERE name LIKE "Jo%";')
...
cursor=connection.cursor()
cursor.execute('SELECT * from `test`.`test_table` WHERE name LIKE "Jo%";')
То произойдет ошибка Exception raised:
Ошибка происходит из за разногласия в передаче параметров (кортеж () вместо None) от django backend'ом
django/db/backends/util.py:36
def execute(self, sql, params=()):
к библиотке БД
def execute(self, sql, params=()):
MySQLdb/cursors.py:139
def execute(self, query, args=None):
...
if args is not None:
query = query % db.literal(args)
def execute(self, query, args=None):
...
if args is not None:
query = query % db.literal(args)
Ошибку можно избежать если явно указать передаваемый параметр как None:
cursor.execute('SELECT * from `test`.`test_table` WHERE name LIKE "Jo%";', None)
Что касается самого тикета, то его сразу же закрыли сославшись на дубликат, который относится ... к пятилетней давности!!! Простейший ошибка живет уже 5 лет по непонятной причине. Я был о django сообществе несколько лучшего мнения.
Это опенсорц, если кому надо, тот шлет патчи или оформляет запрос на слияние. Раз до сих пор висит ошибка — значит не сильно-то и надо.
ОтветитьУдалитьУдачное совпадение вышло, после моего тикета позитивное движение произошло, которое вылилось в fix https://code.djangoproject.com/changeset/76aecfbc4b49f5ab0613cccff1df6fab03253fab
УдалитьА кто вам мешал исправить этот баг, если он по-вашему мнению простейший, вместо того, что бы просто выделываться тут, гневаясь на сообщество?
ОтветитьУдалитьP.S. - для блога с 15-ю сообщениями за 3.5 года, как-то мало рекламы... вон же ещё справа есть место
Если по факту: я и предложил решение, но нужно было его тестировать на всех поддерживаемых Джангой БД, чего я сделать не могу, но может кто то иной, чего я и попросил.
ОтветитьУдалитьЕсли не по факту: >>просто выделываться тут, гневаясь на сообщество?
>>вон же ещё справа есть место
улыбнуло) люди так любят додумывать за других
Евгений, не обращайте внимание на школьников). Спасибо за блог! Пишите, по возможности, чаще.
ОтветитьУдалить