Ich habe den folgenden Code geschrieben, um ungefähr 1500 Daten in einer bestimmten Tabelle auszuwählen, aber aus irgendeinem Grund konnte ich nur 1000 erhalten.
sample_before.py
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
schema = 'mysql://user_id:password@localhost/sample'
engine = create_engine(schema, echo=False, encoding='utf-8')
Base = declarative_base(engine)
class Model(Base):
__tablename__ = 'sample'
__table_args__ = {'autoload': True}
def __repr__(self):
return "<sample class>"
Session = sessionmaker(bind=engine)()
records = Session.query(Model)
print "RECORDS: %d" % records.count()
for record in records:
print 'ID: %d, NAME:%s, ADDRESS:%s, BIRTHDAY:%s'
Wenn ich den obigen Code ausführe, wird `records.count ()`
1000.
Ich habe noch nie mehr als 1000 Daten manipuliert, also habe ich sie untersucht.
Zuallererst ist die Umgebung, die ich benutze, wie folgt.
Als Ergebnis der Untersuchung wurde festgestellt, dass sich der Standardcursor von MySQLdb auf der lokalen Programmseite befindet, wodurch ein Limit festgelegt wird.
Da es so aussieht, als ob ich den Cursor auf der Serverseite haben sollte, habe ich den Code wie folgt geändert.
sample_after.py
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
import MySQLdb.cursors
schema = 'mysql://user_id:password@localhost/sample'
engine = create_engine(schema, echo=False, encoding='utf-8',
connect_args={'cursorclass': MySQLdb.cursors.SSCursor})
Base = declarative_base(engine)
class Model(Base):
__tablename__ = 'sample'
__table_args__ = {'autoload': True}
def __repr__(self):
return "<sample class>"
conn = engine.connect()
Session = sessionmaker(bind=conn)()
records = Session.query(Model)
print "RECORDS: %d" % records.count()
for record in records:
print 'ID: %d, NAME:%s, ADDRESS:%s, BIRTHDAY:%s'
Was passiert, wenn ich einen anderen MySQL-Treiber (MariaDB) verwende? Ich weiß es nicht, weil ich es nicht untersucht habe, aber ich denke, es wird funktionieren, wenn ich es mit connect_args einstelle.
Wenn jemand einen anderen guten Weg kennt, lass es mich wissen.
Recommended Posts