I'm writing a small Python script which needs to fetch live data from a database (I'm using SQLite 3 for now). I may reuse this function for a lot of scripts. Can this code be made better?
def fetch_database(database, table, filter_dict, case=None):
"""
Takes filter parameter as a dict
dict = {'column_name':['filter', 'filter2'], 'column_name2'=[], ..}
case = wrap around the dictionary key(UPPER, LOWER, etc..), None
database (with pathname ex: database.db
table
column = dict.keys()
"""
conn = sqlite3.connect(database)
c = conn.cursor()
filter_dict = dict_format(filter_dict) # A separate function deletes empty keys from dictionary
keys_list = filter_dict.keys()
statement = 'SELECT * FROM ' + table
if len(keys_list) > 0:
statement += ' WHERE '
for keys in keys_list:
if case == None:
key = keys
else:
key = case + '(' + keys + ')'
temp_data = filter_dict[keys]
temp_size = len(temp_data)
if keys_list.index(keys) != 0:
statement += ' AND '
if temp_size > 0:
for data in temp_data:
if temp_data.index(data) == 0:
statement += key + '="' + data + '"'
else:
statement += ' OR ' + key + '="' + data + '"'
dataset = c.execute(statement)
dataset = dataset.fetchall()
return dataset