База данных: быстрее сбрасывать в список или запрашивать каждый раз?

#python #sqlite

#python #sqlite

Вопрос:

У меня есть программа для обработки продаж и инвентаризации предприятий (всех измерений), и я сделал это так, что каждый раз, когда он взаимодействует с данными, хранящимися в базе данных, вызывается функция для этого конкретного запроса. Я считаю, что это неэффективно, поскольку доступ к базе данных часто является медленным процессом, и поскольку программное обеспечение функционирует прямо сейчас, эти запросы для небольших операций ввода-вывода в БД выполняются очень часто. Итак, я думал о том, как это улучшить.

Я думал о том, чтобы сбрасывать данные разных таблиц в разные списки в начале выполнения программного обеспечения и использовать эти списки в процессе его функционирования. Затем, при закрытии, внесите соответствующие изменения в базу данных в соответствии с изменениями, внесенными в списки. Это кажется лучшим решением, поскольку все данные будут находиться в памяти, а медленный процесс обработки больших объемов данных (для которых оптимизированы рамки БД) будет происходить при выполнении и выходе из программы.

В качестве примера следующая функция, которую я вызываю, извлекает всю таблицу или весь столбец таблицы:

 def sqGenericSelect(table, fetchCol=None):
'''
table: table retrieved. If this is the only argument provided, the entire table gets retrieved.
fetchCol: fetched column. If provided, the function returns only the column passed here.
'''
try:
    with conn:
        if not fetchCol: fetchCol = '*'
        c.execute(f'SELECT {fetchCol} FROM {table} ')
        return c.fetchall()
except Exception as exc:
    autolog(f'Problem in table: {table}', exc) #This function is for logs
 

(И он вызывается 8 раз!)

Это правильный подход? Если нет, то как мне это улучшить?

Комментарии:

1. Я бы рекомендовал поэкспериментировать с обоими подходами и профилированием. Накладные расходы при использовании sqlite не такие, как при использовании СУБД, такой как MS-SQL и т.д.

2. Эй, спасибо за ответ, я на самом деле не являюсь носителем английского языка, и я не уверен, что вы имеете в виду, когда говорите «профилирование». Вы имеете в виду измерение времени, необходимого для обоих подходов для выполнения конкретной задачи?

3. Да, это верно — Python предоставляет некоторые инструменты для этого

4. Это может помочь: dba.stackexchange.com/questions/20 /…