这是我的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中运行该查询时,它会给出以下结果
我需要知道这种差异的原因是什么? 我的编码有什么问题吗?
答案 0 :(得分:0)
Cursor类由psycopg2
定义,并由Odoo框架扩展。这意味着您可能认为使用cr.execute
执行原始查询,但事实并非如此。
检查班级sql_db.py
的{{1}}文件并阅读其中的文档。基本上cr对象是这个类的一个实例,这个类基本上包含了Cursor
更改功能的Cursor。检查那里的psycopg2
方法,你会发现它没有直接调用psycopg的execute
方法,而是首先进行一些处理。尝试在那里打印execute
以查看最后传递的参数。
最后,即使您使用的是原始SQL,您仍然使用Odoo的ORM,这意味着还有其他参数/限制。
例如,在pgadmin上,您(可能)可以无限制地访问数据,但使用Cursor,您拥有与params
中用户相同的访问权限。
另外,请检查documentation,因为缓存可能是您看到不同结果的原因。