#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 /…