From: John Dell'A. <de...@ml...> - 2003-10-01 03:33:25
|
Correction: all_tab_columns instead of user_tab_columns "John Dell'Aquila" <de...@ml...> wrote in message news:bldg27$5ro$1...@se...... > Very nice, and only one typo (TRUE). I had to query against all_tables > though because my tables weren't in all_user_tables. > > Thank you! > > - John > > "Dirk Evers" <D....@ex...> wrote in message > news:200...@ag...... > > Hi, > > > > I just hacked together the basic columnsFromSchema implementation for > Oracle. > > I'll post it here for John. Can't help it, I'm sitting behind a firewall. > > I tried out the SQL statement behind it, but not the python code itself, > > so there might be some stupid mistakes/typos in there... > > > > The MySQL version of columnsFromSchema and guessClass is much easier to > understand > > than the PostgreSQL version. > > > > Regards > > Dirk > > > > >>> snip > > > > def columnsFromSchema(self, tableName, soClass): > > # DE: Oracle is nice to us here, for a change! > > colData = self.queryAll("SELECT column_name, data_type, > data_length, data_precision, data_scale, nullable, data_default FROM > user_tab_columns WHERE table_name = UPPER('%s') ORDER BY column_id" > > % tableName) > > results = [] > > for field, t, dataLength, dataPrec, dataScale, nullAllowed, > default, in colData: > > if field == 'ID': > > continue > > > > colClass, kw = > self.guessClass(t,dataLength,dataPrec,dataScale) > > kw['name'] = soClass._style.dbColumnToPythonAttr(field) > > if nullAllowed == 'Y': > > # DE: nullable is a 'Y', 'N' column > > kw['notNone'] = False > > else: > > kw['notNone'] = True > > kw['default'] = default > > # @@ skip key... > > # @@ skip extra... > > results.append(colClass(**kw)) > > return results > > > > def guessClass(self, t, dataLength, dataPrec, dataScale): > > # DE: Oracle gave us all, so there's no need to guess > > col = None > > kw = {} > > if t.startswith('NUMBER'): > > # DE: INT is NUMBER in Oracle > > col = Col.IntCol > > if dataPrec: > > kw['precision'] = int(dataPrec) > > if dataScale: > > kw['scale'] = int(dataPrec) > > elif t.startswith('VARCHAR'): > > col = Col.StringCol > > kw['length'] = int(dataLength) > > kw['varchar'] = TRUE > > elif t.startswith('CHAR'): > > col = Col.StringCol > > kw['length'] = int(dataLength) > > kw['varchar'] = False > > elif t.startswith('DATE'): > > col = Col.DateTimeCol > > elif t.startswith('bool'): > > # DE: Hmm, no good idea how to check for bool yet! > > # DE: Need to identify CONSTRAINT CHECK by name maybe... > > col = Col.BoolCol > > else: > > col = Col.Col > > > > return col, kw > > > > <<< snip > > > > -- > > -------------------------------------------------------------------------- > > Dirk Evers Bioinformatics Research Scientist > > Exelixis Deutschland Fon: +49 (0)7071-9655-16 > > Spemannstr. 35 Fax: +49 (0)7071-9655-96 > > D-72076 Tuebingen, Germany URL: http://www.exelixis.com/ > > -------------------------------------------------------------------------- > > > > > > ------------------------------------------------------- > > This sf.net email is sponsored by:ThinkGeek > > Welcome to geek heaven. > > http://thinkgeek.com/sf > > > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf |