Python 为什么OpenERP报表查询结果与SQL查询结果不同?
以下是我的Python代码: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
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排序,这就是顺序发生更改的原因。