database_updater::DatabaseInterface Class Reference

List of all members.

Public Member Functions

def __init__
def IsOK
def GetResults
def Query
def SetAccessString
def TableExists

Public Attributes

 parent
 Initialise state.
 debug
 access_string
 public_access_string
 results_file
 results

Detailed Description

A simple interface to a MySQL Database.

Makes no assumption about the tables that the database holds.

Definition at line 93 of file database_updater.py.


Member Function Documentation

def database_updater::DatabaseInterface::__init__ (   self,
  parent,
  testConnection = 1 
)

Definition at line 98 of file database_updater.py.

00098                                               :
00099 
00100         ##  Initialise state
00101 
00102         self.parent               = parent # The parent DatabaseUpdater
00103         self.debug                = parent.debug   
00104         self.access_string        = ""     # Access string needed for command: mysql <access string> --execute=<command>
00105         self.SetAccessString()
00106         self.public_access_string = re.compile(r'--password=\S+').sub('--password=XXX',self.access_string)
00107         self.results_file         = '/tmp/mysql_results_%d.tmp' % os.getpid()
00108         self.results              = []
00109 
00110         if testConnection:
00111             if self.IsOK(): print 'DatabaseInterface initialising with account info: ' + self.public_access_string
00112             else:           print 'MySQL DBI connection failed with account info: ' + self.public_access_string
00113 
00114 #---------------------------------------------  DatabaseInterface  --------------------------------------------------
00115 
    def IsOK(self):

def database_updater::DatabaseInterface::GetResults (   self  ) 
Return the results from the last query.

Definition at line 124 of file database_updater.py.

00124                         :
00125         """Return the results from the last query."""
00126         return self.results
00127 
00128 #---------------------------------------------  DatabaseInterface  --------------------------------------------------
00129 
    def Query(self,sql,log_error = True):

def database_updater::DatabaseInterface::IsOK (   self  ) 
Return True if able to execute queries.

Definition at line 116 of file database_updater.py.

00116                   :
00117         """Return True if able to execute queries."""
00118         if not self.access_string: return False
00119         #See if we can run a dummy statement
00120         return self.Query('select 1',False)
00121 
00122 #---------------------------------------------  DatabaseInterface  --------------------------------------------------
00123 
    def GetResults(self):

def database_updater::DatabaseInterface::Query (   self,
  sql,
  log_error = True 
)
Apply query and return True if successful.  To get the results themselves call GetResults()

Unless log_error is False, errors are logged.

Definition at line 130 of file database_updater.py.

00130                                         :
00131         """Apply query and return True if successful.  To get the results themselves call GetResults()
00132 
00133         Unless log_error is False, errors are logged."""
00134 
00135         self.results = []
00136         cmd = 'mysql %s --execute="%s" > %s 2>&1' % (self.access_string,sql,self.results_file)
00137         if self.debug:  print 'About to execute: ' + cmd
00138         exit_code = os.system(cmd)
00139         if os.path.isfile(self.results_file):
00140             log_results = exit_code and log_error
00141             if log_results: print 'SQL query failed with error code %d' % exit_code
00142             file_results = open(self.results_file)
00143             for line in file_results:
00144                 line = line.strip()
00145                 if log_results: print '  SQL log:' + line
00146                 self.results.append(line)
00147             os.remove(self.results_file)
00148         return exit_code == 0
00149 
00150 #---------------------------------------------  DatabaseInterface  --------------------------------------------------
00151 
    def SetAccessString(self):

def database_updater::DatabaseInterface::SetAccessString (   self  ) 
Prepare self.SetAccessString from TSQL environment.

Definition at line 152 of file database_updater.py.

00152                              :
00153         """Prepare self.SetAccessString from TSQL environment."""
00154         self.access_string  = ""
00155         env_url  = os.environ.get('SK_TSQL_URL')
00156         env_user = os.environ.get('SK_TSQL_USER')
00157         env_pswd = os.environ.get('SK_TSQL_PSWD')
00158         if not env_url or not env_user or not env_pswd:
00159             print 'Cannot connect to database.  One or more of the environmental variables:-'
00160             print '  SK_TSQL_URL, SK_TSQL_USER or SK_TSQL_PSWD'
00161             print 'is not defined.'
00162             return
00163         #  Collect server and db and port from from first element of SK_TSQL_URL.
00164         mo = re.search(r'//(.*?)/(\w+)',env_url)
00165         if not mo:
00166             print 'Cannot parse the environmental variables SK_TSQL_URL'
00167             return
00168         (server,db) = mo.groups()
00169         port_opt = ''
00170         mo = re.search(r'^(.*):(\d+)$',server)
00171         if mo:
00172             server = mo.group(1)
00173             port_opt = '--port=' +  mo.group(2)
00174         #  Collect user from first element of SK_TSQL_USER
00175         user = env_user
00176         mo = re.search(r'(.*?);',env_user)
00177         if mo: user = mo.group(1)
00178         #  Collect pswd from first element of SK_TSQL_PSWD
00179         pswd = env_pswd
00180         mo = re.search(r'(.*?);',env_pswd)
00181         if mo: pswd = mo.group(1)
00182         pswd_opt = '--password=' + pswd
00183         if pswd == '\\0': pswd_opt = ''
00184         self.access_string  = '%s --host %s %s --user=%s %s' % (db,server,port_opt,user,pswd_opt)
00185 
00186 #---------------------------------------------  DatabaseInterface  --------------------------------------------------
00187 
    def TableExists(self,table_name):

def database_updater::DatabaseInterface::TableExists (   self,
  table_name 
)
Return True if table exists.

Definition at line 188 of file database_updater.py.

00188                                     :
00189         """Return True if table exists."""
00190         return self.Query('describe ' + table_name,False)
00191         
00192 #---------------------------------------------  TableUpdate  --------------------------------------------------
00193 #---------------------------------------------  TableUpdate  --------------------------------------------------
00194 #---------------------------------------------  TableUpdate  --------------------------------------------------
00195 
class TableUpdate :


Member Data Documentation

Definition at line 104 of file database_updater.py.

Definition at line 103 of file database_updater.py.

Initialise state.

Definition at line 102 of file database_updater.py.

Definition at line 106 of file database_updater.py.

Definition at line 108 of file database_updater.py.

Definition at line 107 of file database_updater.py.


The documentation for this class was generated from the following file:

Generated on 11 Aug 2013 for SKDatabase by  doxygen 1.6.1