Python 为什么OpenERP报表查询结果与SQL查询结果不同?

Python 为什么OpenERP报表查询结果与SQL查询结果不同?,python,xml,openerp,Python,Xml,Openerp,以下是我的Python代码: 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), 'reldat

以下是我的Python代码:

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()
它给出了下面的输出

但当我在pgAdmin中运行该查询时,它给出了以下结果

我需要知道这种差异的原因是什么?
我的编码有问题吗?

游标类由
psycopg2
定义,并由Odoo框架扩展。这意味着您可能认为您使用
cr.execute
执行原始查询,但事实并非如此

检查类
Cursor
sql\u db.py
文件,并阅读其中的文档。cr对象基本上是这个类的一个实例,这个类基本上包装了
psycopg2
修改功能的游标。检查那里的
execute
方法,您将看到它不会直接调用psycopg的
execute
方法,而是先进行一些处理。尝试在那里打印
参数
,查看最后传递了哪些参数

最后,即使您使用的是原始sql,您仍然在使用Odoo的ORM,这意味着附加的参数/限制已经到位。

例如,在pgadmin上,您(可能)可以不受限制地访问数据,但使用光标,您与
self.env.uid
中的用户具有相同的访问权限


另外,请检查,因为缓存可能是您看到不同结果的原因。

您可以在图1中看到,默认情况下,这是按id排序的,按id排序,这就是顺序发生更改的原因。