Mintaka / mypyladies_sqlite

Teaching and testing materials for lessons about SQLite managed by Pyhon.
MIT License
1 stars 4 forks source link

Bulk insert data operations #10

Open Mintaka opened 3 years ago

Mintaka commented 3 years ago

Now we store measurement data one row by one.

Does have SQLite ability to store multiple values in one SQL query? If so, made a code which can do bulk inserts. Also compare duration of separated insert vs bulk inserts.

lucijim commented 3 years ago

pull request #29

koukalka commented 3 years ago

Našla jsem pár řešení a jedno z nich se jeví nejslibněji:

  1. příkaz connection.executemany (viz. https://www.codementor.io/@charreleramis24/how-to-handle-bulk-data-insertion-sqlite-python-16xwf6ggu7)
  2. druhý nápad - vytvoří se virtuální tabulka se všemi daty a zavolá se insert do tabulky nové , kde select * from virtuální tabulka (viz https://stackoverflow.com/questions/364017/faster-bulk-inserts-in-sqlite3)
  3. uložení jako pandas dataframe (ale viz diskuze minule, s pandas ještě nepracujeme)
Mintaka commented 3 years ago

Testoval jsem generovaní dotazu tak že se nejdřív přidá hlavička INSERT INTO table VALUES a pak se přidá řetězec ve kterém jsou poskládané sady hodnot: (null, val1, val2, val3), (null, val4, val5, val6), (null, val7, val8, val9) ... a tím se vloží hodně záznamů najednou.

Chtělo by to ještě vyzkoušet, které z těch řešení je nejefektivnější. Pandas je v našem případě zatím asi kanón na vrabce, ale určitě na něj dojde v samostané/ých lekcích.

lucijim commented 3 years ago

Ahoj,

Filipe, já jsem to zkusila předělat na ten způsob, jak popisuješ a funguje to, viz můj pull request. Ale dělala jsem to před refaktoringem kódu, tak to ještě bude potřeba upravit, kdyžtak se na to večer kouknu. Pandas je možná teda kanón na vrabce, ale nejefektivnější mi přijde. :) Ale je fakt, že je asi blbost to teď dělat přes pandas, když hodně lidí z kurzu neví,jak funguje, spíš pak možná až proberem pandas, tak ukázat, že to jde přes něj taky.

Mintaka commented 3 years ago

Refaktoring by měl být jednoduchý.

Ve funkci insert_csv2db jsou všechna potřebná data k dispozic. Samotnou část, kdy se z csv vytahují jednotlivé řádky a skládají se do řetězce by možná bylo dobré dát do samostatné funkce, která by vracela už jeden kompletní řetězec s daty.

To řešení s Pandas s jeho velmi stručným představením by mohlo být na kurzu představeno.

lucijim commented 3 years ago

OK, díky, tak já na to večer mrknu.

Mintaka commented 3 years ago

Jasan, uvidíš, jak budeš mít prostor a chuť.