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

Source Code for Module Dbase.DbInfo

  1  # $Id: DbInfo.py 243 2007-05-12 05:36:34Z 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'):
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 try: 32 cn = DbModule.connect(dBase,user,password) 33 except: 34 print 'Problems opening database: %s'%(dBase) 35 return [] 36 c = cn.cursor() 37 c.execute(DbModule.getDbSql) 38 if RDConfig.usePgSQL: 39 names = ['::'+str(x[0]) for x in c.fetchall()] 40 else: 41 names = ['::'+str(x[0]) for x in c.fetchall()] 42 names.remove(dBase) 43 elif DbModule.fileWildcard: 44 import os.path,glob 45 names = glob.glob(os.path.join(dirName,DbModule.fileWildcard)) 46 else: 47 names = [] 48 return names
49 50
51 -def GetTableNames(dBase,user='sysdba',password='masterkey', 52 includeViews=0):
53 """ returns a list of tables available in a database 54 55 **Arguments** 56 57 - dBase: the name of the DB file to be used 58 59 - user: the username for DB access 60 61 - password: the password to be used for DB access 62 63 - includeViews: if this is non-null, the views in the db will 64 also be returned 65 66 **Returns** 67 68 - a list of table names (strings) 69 70 """ 71 try: 72 cn = DbModule.connect(dBase,user,password) 73 except: 74 print 'Problems opening database: %s'%(dBase) 75 return [] 76 c = cn.cursor() 77 if not includeViews: 78 comm = DbModule.getTablesSql 79 else: 80 comm = DbModule.getTablesAndViewsSql 81 c.execute(comm) 82 names = [str(x[0]).upper() for x in c.fetchall()] 83 if RDConfig.usePgSQL and 'PG_LOGDIR_LS' in names: 84 names.remove('PG_LOGDIR_LS') 85 return names
86 87 88
89 -def GetColumnInfoFromCursor(cursor):
90 if cursor is None or cursor.description is None: return [] 91 results = [] 92 for item in cursor.description: 93 cName = item[0] 94 cType = item[1] 95 if cType in sqlTextTypes: 96 typeStr='string' 97 elif cType in sqlIntTypes: 98 typeStr='integer' 99 elif cType in sqlFloatTypes: 100 typeStr='float' 101 elif cType in sqlBinTypes: 102 typeStr='binary' 103 elif RDConfig.useSqlLite: 104 typeStr='string' 105 else: 106 sys.stderr.write('odd type in col %s: %s\n'%(cName,str(cType))) 107 results.append((cName,typeStr)) 108 return results
109
110 -def GetColumnNamesAndTypes(dBase,table, 111 user='sysdba',password='masterkey', 112 join='',what='*'):
113 """ gets a list of columns available in a DB table along with their types 114 115 **Arguments** 116 117 - dBase: the name of the DB file to be used 118 119 - table: the name of the table to query 120 121 - user: the username for DB access 122 123 - password: the password to be used for DB access 124 125 - join: an optional join clause (omit the verb 'join') 126 127 - what: an optional clause indicating what to select 128 129 **Returns** 130 131 - a list of 2-tuples containing: 132 133 1) column name 134 135 2) column type 136 137 """ 138 cn = DbModule.connect(dBase,user,password) 139 c = cn.cursor() 140 cmd = 'select %s from %s'%(what,table) 141 if join: 142 cmd += ' join %s'%(join) 143 c.execute(cmd) 144 return GetColumnInfoFromCursor(c)
145
146 -def GetColumnNames(dBase,table,user='sysdba',password='masterkey', 147 join='',what='*'):
148 """ gets a list of columns available in a DB table 149 150 **Arguments** 151 152 - dBase: the name of the DB file to be used 153 154 - table: the name of the table to query 155 156 - user: the username for DB access 157 158 - password: the password to be used for DB access 159 160 - join: an optional join clause (omit the verb 'join') 161 162 - what: an optional clause indicating what to select 163 164 **Returns** 165 166 - a list of column names 167 168 """ 169 cn = DbModule.connect(dBase,user,password) 170 c = cn.cursor() 171 cmd = 'select %s from %s'%(what,table) 172 if join: 173 if join.strip().find('join') != 0: 174 join = 'join %s'%(join) 175 cmd +=' ' + join 176 c.execute(cmd) 177 c.fetchone() 178 desc = c.description 179 res = map(lambda x:str(x[0]),desc) 180 return res
181