Package Dbase :: Module DbInfo
[hide private]
[frames] | no frames]

Source Code for Module Dbase.DbInfo

  1  # $Id: DbInfo.py 746 2008-07-07 13:21:24Z glandrum $ 
  2  # 
  3  #  Copyright (C) 2003-2006  greg Landrum and Rational Discovery LLC 
  4  # 
  5  #   @@ All Rights Reserved  @@ 
  6  # 
  7  import RDConfig 
  8  import DbModule 
  9  import sys 
 10  sqlTextTypes = DbModule.sqlTextTypes 
 11  sqlIntTypes = DbModule.sqlIntTypes 
 12  sqlFloatTypes = DbModule.sqlFloatTypes 
 13  sqlBinTypes = DbModule.sqlBinTypes 
 14   
 15   
16 -def GetDbNames(user='sysdba',password='masterkey',dirName='.',dBase='::template1',cn=None):
17 """ returns a list of databases that are available 18 19 **Arguments** 20 21 - user: the username for DB access 22 23 - password: the password to be used for DB access 24 25 **Returns** 26 27 - a list of db names (strings) 28 29 """ 30 if DbModule.getDbSql: 31 if not cn: 32 try: 33 cn = DbModule.connect(dBase,user,password) 34 except: 35 print 'Problems opening database: %s'%(dBase) 36 return [] 37 c = cn.cursor() 38 c.execute(DbModule.getDbSql) 39 if RDConfig.usePgSQL: 40 names = ['::'+str(x[0]) for x in c.fetchall()] 41 else: 42 names = ['::'+str(x[0]) for x in c.fetchall()] 43 names.remove(dBase) 44 elif DbModule.fileWildcard: 45 import os.path,glob 46 names = glob.glob(os.path.join(dirName,DbModule.fileWildcard)) 47 else: 48 names = [] 49 return names
50 51
52 -def GetTableNames(dBase,user='sysdba',password='masterkey', 53 includeViews=0,cn=None):
54 """ returns a list of tables available in a database 55 56 **Arguments** 57 58 - dBase: the name of the DB file to be used 59 60 - user: the username for DB access 61 62 - password: the password to be used for DB access 63 64 - includeViews: if this is non-null, the views in the db will 65 also be returned 66 67 **Returns** 68 69 - a list of table names (strings) 70 71 """ 72 if not cn: 73 try: 74 cn = DbModule.connect(dBase,user,password) 75 except: 76 print 'Problems opening database: %s'%(dBase) 77 return [] 78 c = cn.cursor() 79 if not includeViews: 80 comm = DbModule.getTablesSql 81 else: 82 comm = DbModule.getTablesAndViewsSql 83 c.execute(comm) 84 names = [str(x[0]).upper() for x in c.fetchall()] 85 if RDConfig.usePgSQL and 'PG_LOGDIR_LS' in names: 86 names.remove('PG_LOGDIR_LS') 87 return names
88 89 90
91 -def GetColumnInfoFromCursor(cursor):
92 if cursor is None or cursor.description is None: return [] 93 results = [] 94 if not RDConfig.useSqlLite: 95 for item in cursor.description: 96 cName = item[0] 97 cType = item[1] 98 if cType in sqlTextTypes: 99 typeStr='string' 100 elif cType in sqlIntTypes: 101 typeStr='integer' 102 elif cType in sqlFloatTypes: 103 typeStr='float' 104 elif cType in sqlBinTypes: 105 typeStr='binary' 106 else: 107 sys.stderr.write('odd type in col %s: %s\n'%(cName,str(cType))) 108 results.append((cName,typeStr)) 109 else: 110 import types 111 r = cursor.fetchone() 112 if not r: return results 113 for i,v in enumerate(r): 114 cName = cursor.description[i][0] 115 typ = type(v) 116 if typ in types.StringTypes: 117 typeStr='string' 118 elif typ == types.IntType: 119 typeStr='integer' 120 elif typ == types.FloatType: 121 typeStr='float' 122 elif typ == types.BufferType: 123 typeStr='binary' 124 else: 125 sys.stderr.write('odd type in col %s: %s\n'%(cName,typ)) 126 results.append((cName,typeStr)) 127 return results
128
129 -def GetColumnNamesAndTypes(dBase,table, 130 user='sysdba',password='masterkey', 131 join='',what='*',cn=None):
132 """ gets a list of columns available in a DB table along with their types 133 134 **Arguments** 135 136 - dBase: the name of the DB file to be used 137 138 - table: the name of the table to query 139 140 - user: the username for DB access 141 142 - password: the password to be used for DB access 143 144 - join: an optional join clause (omit the verb 'join') 145 146 - what: an optional clause indicating what to select 147 148 **Returns** 149 150 - a list of 2-tuples containing: 151 152 1) column name 153 154 2) column type 155 156 """ 157 if not cn: 158 cn = DbModule.connect(dBase,user,password) 159 c = cn.cursor() 160 cmd = 'select %s from %s'%(what,table) 161 if join: 162 cmd += ' join %s'%(join) 163 print 'cmd:',cmd 164 c.execute(cmd) 165 return GetColumnInfoFromCursor(c)
166
167 -def GetColumnNames(dBase,table,user='sysdba',password='masterkey', 168 join='',what='*',cn=None):
169 """ gets a list of columns available in a DB table 170 171 **Arguments** 172 173 - dBase: the name of the DB file to be used 174 175 - table: the name of the table to query 176 177 - user: the username for DB access 178 179 - password: the password to be used for DB access 180 181 - join: an optional join clause (omit the verb 'join') 182 183 - what: an optional clause indicating what to select 184 185 **Returns** 186 187 - a list of column names 188 189 """ 190 if not cn: 191 cn = DbModule.connect(dBase,user,password) 192 c = cn.cursor() 193 cmd = 'select %s from %s'%(what,table) 194 if join: 195 if join.strip().find('join') != 0: 196 join = 'join %s'%(join) 197 cmd +=' ' + join 198 c.execute(cmd) 199 c.fetchone() 200 desc = c.description 201 res = map(lambda x:str(x[0]),desc) 202 return res
203