2016-06-17 27 views
7

Ho cercato di estrarre i dati da un database .mdb e inserirlo nelle colonne della classe Odoo 8.Come estrarre i dati dalla query SQL e assegnarli alle colonne della classe Odoo?

Questo è il mio file .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))) 

Ora, dopo un po 'di ri-lavoro quando si fa clic su pulsante di invio, i dati mostrano in su come nelle immagini seguenti

Results in the logger info

Qualcuno potrebbe fornire prezioso input su questo? Mi piace come ottenere quei valori nelle colonne della classe Odoo (intendevo assegnare ai campi quello della classe) e anche come ottenere colonne da due tabelle.

+0

E più sulla sua un database differnent. (File .MDB) –

+0

Chiunque abbia qualche suggerimento. !!!? –

risposta

2

È necessario comprendere i tipi di recupero in odoo.

- 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') 

Quindi aggiornare il codice di una cosa del genere,

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

Whatever the values you want to set, all those must be returned by query.

Tuttavia questo è ad esempio potrebbe essere necessario aggiornarlo secondo la vostra situazione.

+0

Tecnologie Emipro, in primo luogo grazie per la risposta spiegata. Ma ora sto ricevendo errore qualcosa come: AttributeError: oggetto 'pyodbc.Cursor' non ha attributo 'dictfetchall' –

0

tenta di installare/aggiornare la versione pyodbc .. riferimento this collegamento

+0

Ho già aggiornato facendo riferimento a quel link. Ancora non funziona –