Changeset 3588:70e9cdb17d39 in orange


Ignore:
Timestamp:
04/25/07 10:41:37 (7 years ago)
Author:
polz <polz@…>
Branch:
default
Convert:
909e032166adadb31ae564661d4d8a5009974d44
Message:

An attempt to commit the first semi-working verion of orngSQL.py

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/orngSQL.py

    r3579 r3588  
    55 
    66import orange 
    7  
     7import os 
    88import urllib 
    99 
    1010class SQLReader: 
    11     def __init__(addr = None): 
     11    def __init__(self, addr = None): 
    1212        if addr: 
    13             connect(addr) 
     13            self.connect(addr) 
    1414        self.domainDepot = orange.DomainDepot() 
    1515        self.domain = None 
    16  
    17     def _parseURI(uri): 
     16        self.exampleTable = None 
     17         
     18    def _parseURI(self, uri): 
    1819        """ lifted straight from sqlobject """ 
    1920        schema, rest = uri.split(':', 1) 
     
    6566        return schema, user, password, host, port, path, args 
    6667 
    67     def connect(uri): 
     68    def connect(self, uri): 
    6869        """the uri string's syntax is the same as that of sqlobject. 
    6970        Unfortunately, only postgres and mysql are going to be supported in 
     
    9394            dbArgDict['port'] = port 
    9495        if path: 
    95             dbArgDict['database'] = path 
     96            dbArgDict['database'] = path[1:] 
    9697        self.conn = self.dbmod.connect(**dbArgDict) 
    9798         
    98     def query(s, discreteAttrs = None, classAttr = None, metaAttrs = None): 
     99    def query(self, s, discreteAttrs = None, classAttr = None, metaAttrs = None): 
    99100        """executes a read query and constructs the orange.Domain. 
    100101        If the name of the class attribute is not supplied, the first column is used as the class attribute. 
    101102        If any of the attributes are considered to be discrete, they should be specified. 
    102103        """ 
     104        self.exampleTable = None 
    103105        try: 
    104             self.curs = self.conn.cursor() 
    105             self.curs.execute(s) 
    106             desc = self.curs.desctiption 
     106            curs = self.conn.cursor() 
     107            curs.execute(s) 
     108            desc = curs.description 
    107109            if not classAttr: 
    108110                classAttr = desc[0][0] 
    109111            attrNames = [] 
     112            if not discreteAttrs: 
     113                discreteAttrs = [] 
     114            if not metaAttrs: 
     115                metaAttrs = [] 
    110116            for i in desc: 
    111117                name = i[0] 
     
    122128                    attrName = "m" + attrName 
    123129                attrNames.append(attrName) 
    124             self.domain = self.domainDepot.prepareDomain(attrNames) 
    125         except: 
     130            (self.domain, self.metaIDs, dummy) = self.domainDepot.prepareDomain(attrNames) 
     131            del dummy 
     132            # for reasons unknown, the attributes get reordered. 
     133            domainIndexes = [0] * len(desc) 
     134            for i, name in enumerate(desc): 
     135            #    print name[0], '->', self.domain.index(name[0]) 
     136                domainIndexes[self.domain.index(name[0])] = i 
     137            self.exampleTable = orange.ExampleTable(self.domain) 
     138            r = curs.fetchone() 
     139            while r: 
     140                # for reasons unknown, domain rearranges the properties 
     141                example = orange.Example(self.domain, [str(r[domainIndexes[i]]) for i in xrange(len(r))]) 
     142                self.exampleTable.append(example) 
     143                r = curs.fetchone() 
     144        except Exception, e: 
     145            raise e 
    126146            self.domain = None 
    127     def data(): 
     147 
     148    def data(self): 
    128149        data = None 
    129         if self.domain: 
    130             data = orange.ExampleTable(self.domain) 
    131             r = self.curs.fetchone() 
    132             while r: 
    133                 example = orange.Example(self.domain, [str(i) for i in r]) 
    134                 data.append(example) 
    135                 r = self.curs.fetchone() 
    136         return data 
     150        if self.exampleTable: 
     151            return self.exampleTable 
     152        return None 
    137153     
    138154class SQLWriter: 
Note: See TracChangeset for help on using the changeset viewer.