python - 我正在使用烧瓶,flask_sqlalchemy 分页功能适用于 page1,但不适用于其他页面
问题描述
我已连接到现有的Ms Access数据库。我的模型看起来像
class Suppliers(db.Model):
__tablename__ = 'Suppliers'
SupplierID = db.Column('SupplierID', db.Integer, primary_key=True)
__table_args__ = {'autoload': True,'autoload_with': db.engine}
def __repr__(self):
return f"Suppliers('{self.SupplierID}', '{self.SupplierName}')"
def as_dict(self):
return {"SupplierID": self.SupplierID, "SupplierName":
self.SupplierName}
在视图中,我的查询仅适用于 page=1,但当页面大于 1 时,即 page=2 时,它不起作用;分页查询返回所有项目而不是从 20 到 39 的项目(当 page=2 时,每-page=20) 等等
"sArgs": {"searchString": "sometext","searchPage": 1, "perPage": 20, "orderBy": "SupplierName"}
queryResults = Suppliers.query.filter(Suppliers.SupplierName.like('%'+sArgs['searchString']+'%'))
.order_by(asc(sArgs['orderBy']
)).paginate(
page=int(
sArgs['searchPage']
), per_page=sArgs['perPage']
)
但它在以下情况下不起作用:“sArgs”:{“searchString”:“sometext”,“searchPage”:2,“perPage”:20,“orderBy”:“SupplierName”}。
当我使用sqlite DB 时,同样可以正常工作。 我无法找出这里的问题。请帮助我找到解决方案。感谢您的时间。
解决方案
我尝试使用 mysql 创建一个简单的表,它有一个主键作为 ID 和一个包含一些城市名称的名称,尝试使用相同的逻辑过滤记录,我能够完成它,下面是代码片段相同的 。请检查这是否可以解决您的问题,与您的代码段的唯一区别是我提到了“max_per_page”参数,并且我直接用 like 提到了带有模型名称的实体名称。代码段如下所示。
queryResults = City.query.filter(City.name.like("%as%")).order_by(asc("name")).paginate(page=2, error_out=False, max_per_page=15)
完整片段:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import asc
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://***:***@***/***'
db = SQLAlchemy(app)
class City(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
def __init__(self, name, email):
self.name = name
def __repr__(self):
return '<City Name %r>' % self.name
queryResults = City.query.filter(City.name.like("%as%")).order_by(asc("name")).paginate(page=2, error_out=False, max_per_page=15)
result = dict(datas=queryResults.items,
total=queryResults.total,
current_page=queryResults.page,
per_page=queryResults.per_page)
print(result)
输出 :
{'datas': [<City Name 'Ashdod'>, <City Name 'Ashgabat'>, <City Name 'Ashikaga'>, <City Name 'Ashoknagar-Kalyangarh'>, <City Name 'Ashqelon'>, <City Name 'Asmara'>, <City Name 'Assuan'>, <City Name 'Astana'>, <City Name 'Astrahan'>, <City Name 'Asunción'>, <City Name 'Asyut'>, <City Name 'Ã\x81guas Lindas de Goiás'>, <City Name 'Bandar-e-Abbas'>, <City Name 'Banjarmasin'>, <City Name 'Barasat'>], 'total': 232, 'current_page': 2, 'per_page': 15}
推荐阅读
- python-3.x - 如何以不同的方式将python脚本的输出保存在文本文件中
- r - ggplot2中geom_point的npc坐标
- elasticsearch - 无法访问 Pinterest 搜索结果
- c# - c#表单上的标签不反映文本更改
- c# - 身份验证操作不起作用重定向不起作用
- excel - 如何将列中的两种日期格式更改为excel中的一种?
- powershell - 我可以在不覆盖“keys”成员的情况下将名为“keys”的键添加到哈希表吗
- python-3.x - 如何在 iframe 中获取嵌入谷歌地图的信息?
- tensorflow - Tensorflow.keras 错误使用 Conv2D 输入深度和过滤器深度不兼容?
- python - 无法在python中安装硒