我遇到了这个小问题,我希望这只是一个愚蠢的用户错误.对于SQLite数据库的查询,它看起来像某种大小限制.我设法使用内存数据库和下面显示的简单脚本重现该问题.我可以通过减少数据库中的记录数量来使其工作; 或通过减少每条记录的大小; 或者通过删除order_by()调用.我在Cygwin环境中使用Python 2.5.5和SQLAlchemy 0.6.0.
谢谢!
#!/usr/bin/python
from sqlalchemy.orm import sessionmaker
import sqlalchemy
import sqlalchemy.orm
class Person(object):
def __init__(self, name): self.name = name
engine = sqlalchemy.create_engine('sqlite:///:memory:')
Session = sessionmaker(bind=engine)
metadata = sqlalchemy.schema.MetaData(bind=engine)
person_table = sqlalchemy.Table('person', metadata,
sqlalchemy.Column('id', sqlalchemy.types.Integer, primary_key=True),
sqlalchemy.Column('name', sqlalchemy.types.String))
metadata.create_all(engine)
sqlalchemy.orm.mapper(Person, person_table)
session = Session()
session.add_all([Person("012345678901234567890123456789012")
for i in range(5000)])
session.commit()
persons = session.query(Person).order_by(Person.name).all()
print "count =", len(persons)
session.close()
Run Code Online (Sandbox Code Playgroud)
对查询结果的all()调用失败,出现OperationalError异常:
Traceback (most recent call last):
File "./stress.py", line 27, in <module>
persons = session.query(Person).order_by(Person.name).all()
File "/usr/lib/python2.5/site-packages/sqlalchemy/orm/query.py", line 1343, …Run Code Online (Sandbox Code Playgroud)