问题
I am totally new with flask and sqlalchemy. I try to make one web site just to get better understanding of flask. There are plenty of tutorials and they are mostly use sqlite. For my purpose I use postgres. and I need one page where I can use pagination. But all the time I am getting the error
AttributeError: 'Query' object has no attribute 'paginate'
my database
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()
simple model
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(Unicode(100), nullable=False)
...
then I use paginate
users = User.query.paginate(1, 5, False)
The same error with get_or_404() and first_or_404(). normal get or first works as usual.
I will appreciate any advice!
回答1:
You are calling paginate()
on a query object provided by SQLAlchemy, but the pagination functionality is only available from a Flask-SQLAlchemy, which subclasses the base query object to add this and other features, including the get_or_404()
and first_or_404()
methods that you also found to not work.
All this happens because you created your database and your model using SQLAlchemy directly instead of using the facilities provided by Flask-SQLAlchemy. If you do this according to the Flask-SQLAlchemy documentation you will find that everything will work just fine.
来源:https://stackoverflow.com/questions/18409645/sqlalchemy-does-not-work-with-pagination