2013-10-02 3 views
3

Вот мой код Python:Почему результат запроса отчета OpenERP зависит от результата запроса SQL?

class sign_in_out_model_class(osv.osv): 
    _name = "sign.in.out" 
    _description = "Sign In/Out Report" 
    _auto = False 
    _columns = { 
     'name': fields.char('Emp No', size=128, readonly=True,select=True), 
     'reldate':fields.char('Date', readonly=True,select=True), 
     'sign_in': fields.char('Sign In', readonly=True,select=True), 
     'sign_out': fields.char('Sign Out', readonly=True,select=True), 
    } 
    _order = 'sign_in asc' 

    def init(self, cr): 
     tools.sql.drop_view_if_exists(cr, 'sign_in_out') 
     cr.execute("""CREATE OR REPLACE VIEW sign_in_out AS (
         select max(dup_id) as id,name, 
to_char(min(date),'YY/MM/DD') as reldate, 
to_char(min(date),'HH12:MIam') as sign_in, 
to_char(max(date),'HH12:MIam') as sign_out 
from text_based_attendance 
group by date(date),name)""") 

sign_in_out_model_class() 

Что дает ниже выход

result in openerp

, но когда я запускаю этот запрос в pgAdmin это дает результат ниже

pgAdmin result

I нужно знать, в чем причина этой разницы? Любая проблема с моей кодировкой?

+0

вы можете увидеть на изображении 1 это отсортировано по id по умолчанию odoo _order от ids, поэтому заказ меняется. –

ответ

0

Класс курсора определяется по psycopg2 и расширен с помощью рамки Odoo. Это означает, что вы можете подумать, что выполняете необработанные запросы, используя cr.execute, но это не так.

Проверьте файл sql_db.py для класса Cursor и прочитайте там документацию. В основном объект cr является экземпляром этого класса, и этот класс в основном обертывает курсор psycopg2, изменяя функциональность. Проверьте метод execute, и вы увидите, что он напрямую не вызывает метод psycopg execute, но сначала выполняет некоторую обработку. Попробуйте распечатать params, чтобы увидеть, какие параметры переданы в конце.

В конце концов, даже если вы используете raw sql, вы все еще используете ORM Odoo, что означает наличие дополнительных параметров/ограничений.

Например, на pgadmin вы (возможно) имеете неограниченный доступ к данным, но используя Курсор, вы имеете те же права доступа, что и пользователь, в self.env.uid.

Кроме того, проверьте documentation, потому что кеш может быть причиной того, что вы видите разные результаты.

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