[PYTHON] À propos du comportement de yield_per de SqlAlchemy

Méthode SqlAlchemy yield_per

Est-ce find_in_batches dans Rails? C'est une méthode intéressante qui traite une grande quantité de données de manière séquentielle sans stocker tous les résultats en mémoire.

Si vous pensez que c'est une méthode qui gère bien les limites et les décalages, c'est une méthode qui traite le résultat sélectionné comme un flux sans une telle chose.

En regardant le journal SQL, j'ai pensé qu'il y aurait d'autres personnes que moi qui craignaient que SQL ne sorte pas comme prévu, je vais donc en prendre note.

Comment utiliser le mémo au cas où

yield_per.sample.py


sess = Session(engine)
for obj in sess.query(Customer).filter_by(ownd_uid = n).yield_per(10):
   hogehoge(obj)

Si vous l'écrivez comme ceci, même s'il y a beaucoup d'enregistrements sélectionnés sous la condition de filtre, il sera traité en sélectionnant 10 enregistrements à la fois, de sorte que tous les résultats sélectionnés seront traités séquentiellement sans être stockés dans la mémoire.

C'est le meilleur.

Oh? Utilisez-vous N connexions?

Si vous essayez de show processlist sur MySQL, il semble que chaque connexion appelée par yield_per ait une connexion. Est-ce le cas si vous demandez?

screen 2016-11-06 12.16.41.png

La première boucle qui prend 945 secondes est la boucle supérieure, mais je me demande si elle peut être interrompue par connect_timeout .... (J'ai l'impression que ça va s'épuiser)

Si vous n'utilisez pas une telle quantité de données, vous ne pourrez peut-être pas les voir, donc si vous obtenez une erreur, notez comment l'utiliser.

Résultat: aucune erreur de connexion.

Cela a pris 1 à 2 heures, mais cela s'est terminé sans aucun problème.

Peut-être que si vous gardez une longue connexion, vous ne pourrez pas interroger la liste des processus d'affichage? !!

Par tous les moyens, veuillez étudier le comportement du type de traitement effectué du côté MySQL!

Recommended Posts

À propos du comportement de yield_per de SqlAlchemy
A propos du comportement de enable_backprop de Chainer v2
À propos du comportement de copy, deepcopy et numpy.copy
À propos du comportement de la file d'attente pendant le traitement parallèle
À propos des composants de Luigi
À propos des fonctionnalités de Python
À propos de la valeur de retour de pthread_mutex_init ()
Une note sur le comportement de bowtie2 lors de plusieurs coups
À propos de la valeur de retour de l'histogramme.
À propos de la limite supérieure de threads-max
À propos de la taille des points dans matplotlib
À propos de la liste de base des bases de Python
Vérifiez le comportement du destroyer en Python
À propos de l'environnement virtuel de Python version 3.7
A propos des arguments de la fonction setup de PyCaret
À propos du test
Comportement de multiprocessing.pool.Pool.map
Je voulais faire attention au comportement des arguments par défaut de Python
À propos de la file d'attente
À propos de la précision de la méthode de calcul du rapport de circonférence d'Archimède
À propos de la notation de l'axe X du graphique à barres de Matplotlib
À propos de la vitesse de traitement de SVM (SVC) de scikit-learn
Le comportement de signal () dépend de l'option de compilation
Écrire une note sur la version python de python virtualenv
À propos du contenu de développement de l'apprentissage automatique (exemple)
[Note] À propos du rôle du trait de soulignement "_" en Python
Visualisez le comportement de l'algorithme de tri avec matplotlib
Le début de cif2cell
Un mémorandum sur les avertissements dans les résultats de sortie de pylint
À propos de tout numpy
Le sens de soi
À propos de l'attribution de numpy.ndarray
[python] comportement d'argmax
le zen de Python
Pensez à la nouvelle génération de Rack et WSGI
À propos des tests dans la mise en œuvre de modèles d'apprentissage automatique
À propos de l'inefficacité du transfert de données dans luigi on-memory
Utilisation de base de SQL Alchemy
L'histoire de sys.path.append ()
Examiner le traitement de fermeture de l'ensemble de données Python (wrapper SQLAlchemy)
À propos de la fonction Déplier
À propos de la commande de service
À propos de l'ordre épuré dans l'ordre d'importation flake8
Une histoire sur le changement du nom principal de BlueZ
À propos de la variable du chainer
À propos de la matrice de confusion
À propos du modèle de visiteur
Notes personnelles sur l'intégration de vscode et anaconda
Un mémorandum sur la mise en œuvre des recommandations en Python
La vengeance des types: la vengeance des types
Remarque sur le comportement par défaut de collate_fn dans PyTorch
Pensez à l'environnement d'analyse (Partie 1: Vue d'ensemble) * Depuis janvier 2017
À propos de l'événement de changement de caméra de l'API Google Maps Android
J'ai essayé un peu le comportement de la fonction zip