Этот цикл проверяет, находится ли запись в базе данных sqlite, и создает список словарей для тех записей, которые отсутствуют, а затем выполняет оператор множественной вставки со списком. Это работает, но это очень медленно (по крайней мере, я думаю, что это медленно), так как требуется 5 минут, чтобы зациклить более 3500 запросов. Я новичок в Python, sqlite и sqlalchemy, поэтому мне интересно, есть ли более быстрый способ сделать это.
list_dict = []
session = Session()
for data in data_list:
if session.query(Class_object).filter(Class_object.column_name_01 == data[2]).filter(Class_object.column_name_00 == an_id).count() == 0:
list_dict.append({'column_name_00':a_id,
'column_name_01':data[2]})
conn = engine.connect()
conn.execute(prices.insert(),list_dict)
conn.close()
session.close()
edit: я переместил session = Session()
за пределы цикла. Не имеет значения.
РЕШЕНИЕ
спасибо mcabral ответ Я изменил код как:
existing_record_list = []
list_dict = []
conn = engine.connect()
s = select([prices.c.column_name_01], prices.c.column_name_00==a_id)
result = conn.execute(s)
for row in result:
existing_record_list.append(row[0])
for data in raw_data['data']:
if data[2] not in existing_record_list:
list_dict.append({'column_name_00':a_id,
'column_name_01':data[2]}
conn = engine.connect()
conn.execute(prices.insert(),list_dict)
conn.close()
Теперь это занимает 6 секунд. Это некоторое улучшение !!