【问题标题】:Sqlalchemy does not work with paginationSqlalchemy 不适用于分页
【发布时间】:2013-08-23 18:36:43
【问题描述】:

我对烧瓶和 sqlalchemy 完全陌生。我尝试制作一个网站只是为了更好地了解烧瓶。有很多教程,它们大多使用 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() 的错误相同。 normal get 或 first 照常工作。

我将不胜感激任何建议!

【问题讨论】:

    标签: postgresql pagination flask flask-sqlalchemy


    【解决方案1】:

    您在 SQLAlchemy 提供的查询对象上调用 paginate(),但分页功能仅可从 Flask-SQLAlchemy 获得,后者将基本查询对象子类化以添加此功能和其他功能,包括 get_or_404() 和 @ 987654324@ 您也发现不起作用的方法。

    所有这些都是因为您直接使用 SQLAlchemy 创建数据库和模型,而不是使用 Flask-SQLAlchemy 提供的工具。如果你按照 Flask-SQLAlchemy documentation 来做,你会发现一切正常。

    【讨论】:

    • 我也面临同样的问题,所以我需要使用 Flask-SQLAlchemy 而不是 sqlalchemy 创建我的模型?实现分页
    • 如何让分页仅使用 SQLAlchemy?请帮忙。
    • @Hussain:您可以使用limit()offset() 查询修饰符来请求结果的子集。
    【解决方案2】:

    使用 limit()offset() 使用 mysql sqlalchemy 进行分页。

    query = User.query.limit().offset()
    data = query.all()
    

    你会得到想要的结果。

    【讨论】:

    • 请添加有关limit()offset() 参数的信息,并且仅当您使用基本SQLAlchemy 而不是Flask-SQLAlchemy 时才需要这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2014-09-10
    相关资源
    最近更新 更多