Mercurial Hosting > traffic-intelligence
diff python/storage.py @ 715:a05f79c74d6d dev
merged default with dev
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Sat, 25 Jul 2015 22:36:39 -0400 |
parents | d6c69d3d09e5 |
children | 2cd245cb780d |
line wrap: on
line diff
--- a/python/storage.py Wed Jul 22 14:18:06 2015 -0400 +++ b/python/storage.py Sat Jul 25 22:36:39 2015 -0400 @@ -34,6 +34,50 @@ except sqlite3.OperationalError as error: printDBError(error) +def createIndex(connection, tableName, columnName, unique = False): + '''Creates an index for the column in the table + I will make querying with a condition on this column faster''' + try: + #connection = sqlite3.connect(filename) + cursor = connection.cursor() + s = "CREATE " + if unique: + s += "UNIQUE " + cursor.execute(s+"INDEX IF NOT EXISTS "+tableName+"_"+columnName+"_index ON "+tableName+"("+columnName+")") + connection.commit() + #connection.close() + except sqlite3.OperationalError as error: + printDBError(error) + +def getNumberRowsTable(connection, tableName, columnName = None): + '''Returns the number of rows for the table + If columnName is not None, means we want the number of distinct values for that column + (otherwise, we can just count(*))''' + try: + cursor = connection.cursor() + if columnName is None: + cursor.execute("SELECT COUNT(*) from "+tableName) + else: + cursor.execute("SELECT COUNT(DISTINCT "+columnName+") from "+tableName) + return cursor.fetchone()[0] + except sqlite3.OperationalError as error: + printDBError(error) + +def getMinMax(connection, tableName, columnName, minmax): + '''Returns max/min or both for given column in table + minmax must be string max, min or minmax''' + try: + cursor = connection.cursor() + if minmax == 'min' or minmax == 'max': + cursor.execute("SELECT "+minmax+"("+columnName+") from "+tableName) + elif minmax == 'minmax': + cursor.execute("SELECT MIN("+columnName+"), MAX("+columnName+") from "+tableName) + else: + print("Argument minmax unknown: {}".format(minmax)) + return cursor.fetchone()[0] + except sqlite3.OperationalError as error: + printDBError(error) + # TODO: add test if database connection is open # IO to sqlite def writeTrajectoriesToSqlite(objects, outputFilename, trajectoryType, objectNumbers = -1): @@ -322,7 +366,7 @@ queryStatement = 'SELECT OF.object_id, P.frame_number, avg(P.x_coordinate), avg(P.y_coordinate) from '+tableName+' P, objects_features OF where P.trajectory_id = OF.trajectory_id' if objectNumbers is not None: queryStatement += ' and OF.object_id '+objectCriteria - queryStatement += ' group by OF.object_id, P.frame_number ORDER BY OF.object_id, P.frame_number' + queryStatement += ' GROUP BY OF.object_id, P.frame_number ORDER BY OF.object_id, P.frame_number' cursor.execute(queryStatement) logging.debug(queryStatement) elif trajectoryType in ['bbtop', 'bbbottom']: @@ -332,7 +376,7 @@ corner = 'bottom_right' queryStatement = 'SELECT object_id, frame_number, x_'+corner+', y_'+corner+' FROM '+tableName if objectNumbers is not None: - queryStatement += ' where object_id '+objectCriteria + queryStatement += ' WHERE object_id '+objectCriteria queryStatement += ' ORDER BY object_id, frame_number' cursor.execute(queryStatement) logging.debug(queryStatement)