/ / Comment fonctionne executemany () - sqlite, executemany

Comment fonctionne executemany () - sqlite, executemany

J'utilise c ++ et travaille avec sqlite. En python, j'ai une opération executemany dans la bibliothèque, mais la bibliothèque c ++ que j'utilise ne possède pas cette opération.

Je me demandais comment l'opération executemany optimisait les requêtes pour les rendre plus rapides.

J'étais en train de regarder l'API de sqlite c / c ++ et j'ai vu qu'il y avait deux commandes, sqlite3_reset et sqlite3_clear_bindings, qui peuvent être utilisées pour effacer et réutiliser des instructions préparées.

Est-ce ce que python fait pour traiter par lots et accélérer les requêtes d'exécution (au moins pour les insertions)? Merci pour votre temps.

Réponses:

2 pour la réponse № 1

executemany lie simplement les paramètres, exécute les instructions et appelle sqlite3_reset, en boucle.

Python ne vous donne pas un accès direct à ladéclaration après qu’elle ait été préparée, c’est donc le seul moyen de la réutiliser. Cependant, SQLite ne prend pas beaucoup de temps pour préparer des instructions, il est donc peu probable que cela influe beaucoup sur les performances.

La chose la plus importante pour la performance est de grouper les instructions dans une transaction; Python essaie d'être intelligent et faire cela automatiquement (indépendamment de executemany).


0 pour la réponse № 2

J'ai jeté un coup d'œil à certains des articles liés et j'ai trouvéce qui suit était très détaillé sur les moyens d’améliorer les performances de l’insertion de lots sqlite Ces principes pourraient effectivement être utilisés pour créer une fonction d'exécution.

Améliorer les performances INSERT par seconde de SQLite?

Les changements les plus importants en termes d’amélioration ont été les suivants:@CL. dit, en transformant tout cela en une transaction. L'auteur de l'autre article a également constaté une amélioration significative en utilisant et en réutilisant des instructions préparées et en jouant avec certains paramètres pragma.