2013-08-23 47 views
4

我是全新的烧瓶和sqlalchemy。我试图制作一个网站,以便更好地理解烧瓶。有很多教程,他们大多使用sqlite。为了我的目的,我使用postgres。我需要一个页面,我可以使用分页。但是,所有的时间,我得到的错误Sqlalchemy不能与分页工作

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()。正常或第一次照常工作。

我会感激任何意见!

回答

2

要调用由SQLAlchemy中所提供的查询对象paginate(),但分页功能仅适用从烧瓶SQLAlchemy的,其子类的基本查询对象添加这个和其他功能,包括get_or_404()first_or_404()方法,您也发现不起作用。

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

+0

我也面临同样的问题,所以我需要使用'Flask-SQLAlchemy'而不是sqlalchemy来创建我的模型?实现分页 – kartheek

+0

如何使分页与SQLAlchemy一起工作?请帮忙。 – Hussain

+0

@Hussain:你可以使用'limit()'和'offset()'查询修饰符来请求结果的一个子集。 – Miguel