我对 flask 和 sqlalchemy 完全陌生。我尝试制作一个网站只是为了更好地了解 flask 。有很多教程,它们大多使用sqlite。出于我的目的,我使用 postgres。我需要一页可以使用分页。但我一直收到错误
AttributeError: 'Query' object has no attribute 'paginate'
我的数据库
uri = os.environ.get('DATABASE_URL', 'postgres://login:password@127.0.0.1/db_name')
engine = create_engine(uri, convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
简单模型
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(Unicode(100), nullable=False)
...
然后我使用分页
users = User.query.paginate(1, 5, False)
get_or_404() 和 first_or_404() 也有同样的错误。正常 get 或 first 像往常一样工作。
我将不胜感激任何建议!
最佳答案
您正在 SQLAlchemy 提供的查询对象上调用 paginate()
,但分页功能只能从 Flask-SQLAlchemy 中获得,它对基本查询对象进行子类化以添加此功能和其他功能,包括您也发现没有的 get_or_404()
和 first_or_404()
方法工作。
所有这一切的发生都是因为您直接使用 SQLAlchemy 创建了数据库和模型,而不是使用 Flask-SQLAlchemy 提供的工具。如果您根据 Flask-SQLAlchemy documentation 执行此操作,您会发现一切正常。
关于postgresql - Sqlalchemy 不支持分页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18409645/