2015-07-22 1 views
1

Так что я переношу свои модули с 7 на 8, и у меня есть проблема с запросами.Выполнение SQL-запроса

У меня есть запрос, как это:

SELECT sum(product_qty) FROM stock_move WHERE state NOT IN ('cancelled', 'done') AND product_id = %s AND purchase_line_id IS NOT NULL; 

а затем выполнить этот запрос у меня есть:

self._cr.execute(sql, (product,)) 

И для извлечения данных у меня есть:

amount = self._cr.fetchone() 

It не извлекает какие-либо данные, почему это? Когда я запускаю запрос в консоли, он работает по назначению.

+0

Сначала проверьте свой запрос в интерфейсе PgAdmin. Во-вторых, в новом API-интерфейсе v8 курсор базы данных содержится в среде и может быть доступен следующим образом: 'self.env.cr' Итак, ваша строка должна выглядеть примерно так: ' self.env.cr.execute («SELECT sum (product_qty) FROM ... yaddayadda») ' –

+0

@ ChiruConstantin-Alexandru Курсор также содержится в self, если у вас api.multi например. Ошибка, которую я сделал, это то, что я использовал api.model, который не имеет курсора. – RandomPerson

ответ

2

Так v7 и v8 Api довольно сильно отличается в их поведении, в v7 вы используете, чтобы иметь кр как метод params так что вы можете сказать прямо cr.execute, и она работает, но в v8 кр является частью выполнения [environment][1] переменной, которая хранит различные контекстуальные данные, используемые ORM и cr, являются его частью. Теперь, как «кр» является частью environment и environment, переменная с именем env, является частью самого себя, вы должны вытащить cr из env, поэтому синтаксис будет:

self.env.cr.execute("<yoursql>")

Это будет выполнять он SQL инъекции.

Но будьте осторожны с v7 и v8. Синтаксическое сочетание и соответствие поведения рамки v8. Если вы все еще используете старый API methois с cr, uid, ids и context param, ваш cr является прямым, а затем частью self.

Thanks

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

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