def test_db_results_to_dict(self): # arrange raw = ["hi", "0", "0.5"] columns = [ { 'column_name' : "test_text", 'datatype' : 'TEXT', }, { 'column_name' : "test_int", 'datatype' : 'INTEGER', }, { 'column_name' : "test_float", 'datatype' : 'REAL', } ] # act out = Utils.db_results_to_dict(columns, raw) # assert keys = out.keys() for column in columns: self.assertTrue(column['column_name'] in keys) self.assertTrue(type(out['test_text']) is str) self.assertTrue(type(out['test_int']) is int) self.assertTrue(type(out['test_float']) is float)
def get_character(self, id = -1): """Get from the database all columns for the given character id. Returns a dictionary where keys are the column names. Returns False if there is an error, or if the number of fields returned is not equal to the number of columns in the table. Returns None if character not found. """ if id <= 0: return False columns = self.schema['columns'] # TODO(gus): why does sqlite3 throw an error when table name is a placeholder? query = "SELECT " + ','.join(self.column_names) \ + " FROM " + self.schema['name'] \ + " WHERE " + self.ID_COLUMN_KEY + "=?" \ + " LIMIT 1" success, unused, unused, entries = self._db.query(query, (id,)) # These checks should be done in this order. if not success: return False if len(entries) == 0: return None if len(entries[0]) is not len(columns): return False else: return Utils.db_results_to_dict(columns, entries[0])