Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to improve the speed of a loop containing a sqlalchemy query statement as conditional
    primarykey
    data
    text
    <p>This loop checks if a record is in the sqlite database and builds a list of dictionaries for those records that are missing and then executes a multiple insert statement with the list. This works but it is very slow (at least i think it is slow) as it takes 5 minutes to loop over 3500 queries. I am a complete newbie in python, sqlite and sqlalchemy so I wonder if there is a faster way of doing this.</p> <pre><code>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() </code></pre> <p>edit: I moved <code>session = Session()</code> outside the loop. Did not make a difference.</p> <p><strong>SOLUTION</strong>:</p> <p>thanks to <strong>mcabral</strong> answer I modified the code as:</p> <pre><code>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() </code></pre> <p>This now takes 6 seconds. That is some improvement!!</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload