J'ai écrit le code suivant pour SELECT environ 1500 données dans une certaine table, mais pour une raison quelconque, je ne pouvais en obtenir que 1000.
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'
Lorsque j'exécute le code ci-dessus,
records.count () '' devient 1000.
Je n'avais jamais manipulé plus de 1000 données auparavant, alors je les ai étudiées.
Tout d'abord, l'environnement que j'utilise est le suivant.
À la suite de l'enquête, il a été constaté que le curseur par défaut de MySQLdb se trouve du côté du programme local, ce qui impose une limite.
Puisqu'il semble que je devrais avoir le curseur côté serveur, j'ai modifié le code comme suit.
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'
Je ne sais pas ce qui se passe si j'utilise un autre pilote de MySQL (MariaDB)? Je ne sais pas, mais je pense que cela fonctionnera si je le configure avec connect_args.
Si quelqu'un connaît un autre bon moyen, faites-le moi savoir.
Recommended Posts