postgresql SQLAlchemy不支持分页

fcipmucu  于 5个月前  发布在  PostgreSQL
关注(0)|答案(3)|浏览(58)

我是全新的 flask 和sqlalchemy.我试图使一个网站只是为了更好地了解 flask .有大量的教程,他们大多是使用sqlite.对于我的目的,我使用postgres.我需要一个页面,我可以使用分页.但所有的时间,我得到的错误

AttributeError: 'Query' object has no attribute 'paginate'

字符串
我的数据库

uri = os.environ.get('DATABASE_URL', 'postgres://login:[email protected]/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照常工作。
我将感谢任何建议!

oymdgrw7

oymdgrw71#

您正在对SQLAlchemy提供的查询对象调用paginate(),但分页功能只能从Flask-SQLAlchemy中获得,Flask-SQLAlchemy将基本查询对象子类化以添加此功能和其他功能,包括您发现无法工作的get_or_404()first_or_404()方法。
这一切都是因为你直接使用SQLAlchemy创建了你的数据库和模型,而不是使用Flask-SQLAlchemy提供的工具。如果你按照Flask-SQLAlchemy documentation来做,你会发现一切都很好。

7gyucuyw

7gyucuyw2#

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

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

字符串
你会得到想要的结果。

i86rm4rw

i86rm4rw3#

您是否尝试过使用db_session,例如:

page = request.args.get('page', type=int)

users = db_session.query(Users).paginate(page=page, per_page=10)

字符串
以类似于Flask-SQLAlchemy文档的方式。

相关问题