Я пишу функцию в классе, которая позволяет пользователю передавать имя таблицы sqlite для чтения, имена столбцов, которые пользователь хочет прочитать в память, и дискриминаторы, которые можно использовать для фильтрации по ключевым словам в определенных столбцах. , Первая часть функции строит текстовую строку и помещает символы ?
в область, куда данные должны быть переданы с помощью команды params
. У меня есть команда печати в функции, чтобы помочь мне проверить правильность текстовой строки. Текстовая строка с правильными ключевыми словами работает при ручном вводе в командной строке sqlite3, но не работает при реализации в моей функции. Я предполагаю, что моя проблема в том, как я связываю данные с позициями ?
, но я не уверен. Мой класс и тест класса выглядят следующим образом.
class ReadSQLite:
def __init__(self, database):
self.database = database
try:
self.conn = sqlite3.connect(self.database)
self.cur = self.conn.cursor()
except sqlite3.Error:
sys.exit('{}{}{}'.format('FATAL ERROR: ', self.database, ' does not exist'))
# ---------------------------------------------------------------------------------------------
def close_database_connection(self):
self.conn.close()
return
# ---------------------------------------------------------------------------------------------
def query_columns_by_keywords_to_dataframe(self, table, columns, column, keys):
query = 'SELECT '
for i in range(len(columns)):
query = query + columns[i] + ', '
query = query[:-2] + ' from ' + table + ' where '
for i in range(len(column)):
query = query + column[i] + " = (?)" + ' and '
query = query[:-5]
print(query)
pd.read_sql_query(query, self.conn, params=((keys), ))
#=============================================================================================
#=============================================================================================
# MAIN PROGRAM
file_name = 'data/unittests/read_files/database_two.db'
test3 = ReadSQLite(file_name)
df = test3.query_columns_by_keywords_to_dataframe('test',
['category', 'food'],
['category'],
['fruit'])
test3.close_database_connection()
Я пытаюсь использовать код для чтения в тестовой базе данных с именем database_two.db
, которая содержит таблицу с названием test
. База данных содержит следующую информацию
id category food
------------ -------------- ----------
1 fruit banana
2 meat steak
3 vegetable celery
4 meat pork chop
5 fruit orange
6 vegetable tomato