如何从 SQL 查询中提取数据并将其分配给 Odoo 类列?

Posted

技术标签:

【中文标题】如何从 SQL 查询中提取数据并将其分配给 Odoo 类列?【英文标题】:How to extract data from SQL query and assign it to Odoo class columns? 【发布时间】:2016-06-17 10:53:49 【问题描述】:

我一直在尝试从 .mdb 数据库中提取数据并将其放入 Odoo 8 类列中。

这是我的 .py 文件

  class attendance_biometric(osv.Model):
    _name="attendance.biometric"
    _rec_name='name'
    _columns=

        'fdate':fields.datetime('From Date'),
        'tdate':fields.datetime('To Date'),
        'code':fields.integer('Code'),
        'name':fields.many2one('res.users','Employee Name', readonly=True),
        'ref': fields.one2many('bio.data', 'bio_ref', 'Data'),
    

    _defaults = 
            'name': lambda obj, cr, uid, context: uid,

            


def confirm_submit(self, cr, uid, ids, context=None):
        result=[]
        DBfile = '/home/administrator/test.mdb'
        conn = pyodbc.connect('DRIVER=MDBtools;DBQ='+DBfile)
        cr = conn.cursor()
        sql = '''
            select InTime, OutTime, OutDeviceId, Duration from 
AttendanceLogs '''
        cr.execute(sql)
        rows = cr.fetchall()
        for row in enumerate(rows):
            result.append(row)
        raise osv.except_osv(_('Info'),_('Data : %s\n' % (result)))

现在,当我点击提交按钮时,经过一些返工,数据显示如下图所示

有人可以就此提供有价值的意见吗?比如如何将这些值放入 Odoo 类列(我的意思是分配给类的字段)以及如何从两个表中获取列。

【问题讨论】:

还有更多不同的数据库。 (.MDB 文件) 任何人有任何建议。!!!? 【参考方案1】:

您需要了解 odoo 中的 fetch 类型。

 - cr.dictfetchall()
       It will returns the list of dictionary.
       Example:
           ['column1':'value_column1',, 'column2':'value_column2',] 

 - cr.dictfetchone() 
       It will return dictionary (Single record)
       Example:
           'column1':'value_column1',


 - cr.fetchall()
        It will returns the list of tuple.
        Example: 
            [('value_column1'), ('value_column2'), ].



 - cr.fetchone()
        It will returns the list of tuple.
        Example: 
            ('value_column1')

所以像这样更新你的代码,

res = cr.dictfetchall()
result['sname'] = res and res[0]['sname']

无论你想设置什么值,都必须通过查询返回。

但这是示例,您可能需要根据自己的情况对其进行更新。

【讨论】:

Emipro 技术,首先非常感谢您的解释性回答。但现在我收到类似的错误:AttributeError: 'pyodbc.Cursor' object has no attribute 'dictfetchall'【参考方案2】:

尝试安装/升级pyodbc版本..参考this链接

【讨论】:

我已经通过参考该链接进行了升级。还是不行

以上是关于如何从 SQL 查询中提取数据并将其分配给 Odoo 类列?的主要内容,如果未能解决你的问题,请参考以下文章

我如何根据对象标签从这个排序数组中提取碰撞数据并将该对象分配给 C# 中的目标

如何从 SQL Server 2014 中的 Select 查询中将数据分配给用户定义的表类型

如何插入从分配给 Dictionary<int, int> 的 SQL 表中提取的数据?(ASP.Net)

从列表列表中提取元素并将其分配为熊猫数据框列中的值

如何从数据库中选择多个数据并将其分配到会话中?

如何在python中执行mysql查询并将输出作为数据框[重复]