Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Abrufen von Daten aus MySQL in Stapeln über Python

Erster Punkt:ein Python db-api.cursor ist ein Iterator, es sei denn, Sie brauchen es wirklich Um einen ganzen Stapel auf einmal in den Speicher zu laden, können Sie einfach mit dieser Funktion beginnen, dh anstelle von:

cursor.execute("SELECT * FROM mytable")
rows = cursor.fetchall()
for row in rows:
   do_something_with(row)

Sie könnten einfach:

cursor.execute("SELECT * FROM mytable")
for row in cursor:
   do_something_with(row)

Wenn die Implementierung Ihres DB-Konnektors diese Funktion immer noch nicht richtig nutzt, ist es an der Zeit, LIMIT und OFFSET zu der Mischung hinzuzufügen:

# py2 / py3 compat
try:
    # xrange is defined in py2 only
    xrange
except NameError:
    # py3 range is actually p2 xrange
    xrange = range

cursor.execute("SELECT count(*) FROM mytable")
count = cursor.fetchone()[0]
batch_size = 42 # whatever

for offset in xrange(0, count, batch_size):
    cursor.execute(
        "SELECT * FROM mytable LIMIT %s OFFSET %s", 
        (batch_size, offset))
   for row in cursor:
       do_something_with(row)