Mercurial > repos > yufei-luo > s_mart
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() |