comparison commons/core/sql/DbSQLite.py @ 6:769e306b7933

Change the repository level.
author yufei-luo
date Fri, 18 Jan 2013 04:54:14 -0500
parents
children
comparison
equal deleted inserted replaced
5:ea3082881bf8 6:769e306b7933
1 import sqlite3
2 import os
3 import sys
4
5 #TODO: update...compare with DbMySql.py
6 class DbSQLite(object):
7
8 ## Constructor
9 #
10 # @param host string db file path
11 # @param cfgFileName string configuration file name
12 #
13 # @note when a parameter is left blank, the constructor is able
14 # to set attribute values from environment variable: REPET_HOST,
15 #
16 def __init__(self, host = ""):
17 if host != "":
18 self.host = host
19 else:
20 msg = "ERROR: no host specified"
21 sys.stderr.write( "%s\n" % msg )
22 sys.exit(1)
23 # remove open() and cursor from init() use directly outside this class ...
24 self.open()
25 self.cursor = self.db.cursor()
26
27 ## Connect to the DbSQLite database
28 #
29 # @param verbose integer (default = 0)
30 #
31 def open( self, verbose = 0, nb = 0 ):
32 try:
33 #sqlite.connect(":memory:", check_same_thread = False)
34 self.db = sqlite3.connect(self.host, check_same_thread= False, isolation_level=None, detect_types=sqlite3.PARSE_DECLTYPES)
35 except sqlite3.Error, e:
36 if verbose > 0:
37 print "ERROR %s" % e
38 sys.stdout.flush()
39 return False
40 return True
41
42 ## Execute a SQL query
43 #
44 # @param qry string SQL query to execute
45 # @param params parameters of SQL query
46 #
47 def execute( self, qry, params=None ):
48 try :
49 if params == None:
50 self.cursor.execute( qry )
51 else:
52 self.cursor.execute( qry, params )
53 except Exception, e:
54 #TODO Must be test
55 try :
56 if params == None:
57 self.cursor.execute( qry )
58 else:
59 self.cursor.execute( qry, params )
60 except Exception, e:
61 print "Erreur : %s" % e
62
63 ## Retrieve the results of a SQL query
64 #
65 def fetchall(self):
66 return self.cursor.fetchall()
67
68 ## Record a new table in the 'info_table' table
69 #
70 # @param tableName string table name
71 # @param info string information on the table origin
72 #
73 def updateInfoTable( self, tableName, info ):
74 if not self.doesTableExist( "info_tables" ):
75 sqlCmd = "CREATE TABLE info_tables ( name varchar(255), file varchar(255) )"
76 self.execute( sqlCmd )
77 sqlCmd = 'INSERT INTO info_tables VALUES ("%s","%s")' % (tableName, info)
78 self.execute( sqlCmd )
79
80 def createTable(self, tableName, dataType, overwrite=False, verbose=0):
81 if verbose > 0:
82 print "creating table '%s' from file '%s' of type '%s'..." % (tableName, dataType)
83 sys.stdout.flush()
84 if overwrite:
85 self.dropTable(tableName)
86 if dataType.lower() in ["job", "jobs"]:
87 self.createJobTable(tableName)
88 else:
89 print "ERROR: unknown type %s" % (dataType)
90 self.close()
91 sys.exit(1)
92 if verbose > 0:
93 print "done!"; sys.stdout.flush()
94
95 ## Create a job table
96 #
97 # @param tablename new table name
98 #
99 def createJobTable( self, tablename ):
100 sqlCmd = "CREATE TABLE %s" % ( tablename )
101 sqlCmd += " ( jobid INT UNSIGNED"
102 sqlCmd += ", jobname VARCHAR(255)"
103 sqlCmd += ", groupid VARCHAR(255)"
104 sqlCmd += ", command TEXT"
105 sqlCmd += ", launcher VARCHAR(1024)"
106 sqlCmd += ", queue VARCHAR(255)"
107 sqlCmd += ", status VARCHAR(255)"
108 sqlCmd += ", time timestamp"
109 sqlCmd += ", node VARCHAR(255) )"
110 self.execute( sqlCmd )
111
112 self.updateInfoTable( tablename, "job table" )
113 sqlCmd = "CREATE INDEX igroupid ON " + tablename + " ( groupid )"
114 self.execute( sqlCmd )
115
116 ## Test if a table exists
117 #
118 # @param table string table name
119 # @return boolean True if the table exists, False otherwise
120 #
121 def doesTableExist( self, table ):
122 qry = "PRAGMA table_info(%s)" % (table)
123 self.execute( qry )
124 results = self.cursor.fetchall()
125 if results:
126 return True
127 return False
128
129 def isEmpty( self, tableName ):
130 return self.getSize( tableName ) == 0
131
132 ## Give the rows number of the table
133 #
134 # @param tableName string table name
135 #
136 def getSize( self, tableName ):
137 qry = "SELECT count(*) FROM %s;" % ( tableName )
138 self.execute( qry )
139 res = self.fetchall()
140 return int( res[0][0] )
141
142 ## Remove a table if it exists
143 #
144 # @param table string table name
145 # @param verbose integer (default = 0)
146 #
147 def dropTable( self, table, verbose = 0 ):
148 if self.doesTableExist( table ):
149 sqlCmd = "DROP TABLE %s" % ( table )
150 self.execute( sqlCmd )
151 sqlCmd = 'DELETE FROM info_tables WHERE name = "%s"' % ( table )
152 self.execute( sqlCmd )
153
154 ## Get a list with the fields
155 #
156 def getFieldList( self, table ):
157 lFields = []
158 sqlCmd = "PRAGMA table_info(%s)" % ( table )
159 self.execute( sqlCmd )
160 lResults = self.fetchall()
161 for res in lResults:
162 lFields.append( res[1] )
163 return lFields
164
165 ## delete this SQLite database session
166 #
167 def delete(self):
168 os.remove(self.host)
169
170 ## Close the connection
171 #
172 def close( self ):
173 self.db.close()