efficace de la mémoire intégrée SqlAlchemy itérateur/générateur?

J'ai un ~10M enregistrement de la table MySQL que je l'interface avec l'aide de SqlAlchemy. J'ai trouvé que les requêtes sur de grands sous-ensembles de ce tableau permettra de consommer trop de mémoire, même si je pensais que j'étais l'aide d'un générateur de façon intelligente extraites petits morceaux de la base de données:

for thing in session.query(Things):
    analyze(thing)

Pour éviter cela, je trouve que je dois construire mon propre itérateur qui mord en morceaux:

lastThingID = None
while True:
    things = query.filter(Thing.id < lastThingID).limit(querySize).all()
    if not rows or len(rows) == 0: 
        break
    for thing in things:
        lastThingID = row.id
        analyze(thing)

Est-ce normal ou est-il quelque chose qui m'échappe concernant SA built-dans les générateurs?

La réponse à cette question semble indiquer que la consommation de la mémoire n'est pas à prévoir.

  • J'ai quelque chose de très similaire, sauf qu'il donne de "chose". Fonctionne mieux que toutes les autres solutions
  • N'est-il pas Chose.id > lastThingID? Et qu'est-ce que les "lignes"?
InformationsquelleAutor Paul | 2011-09-12