处理 ResultProxy 对象
Posted
技术标签:
【中文标题】处理 ResultProxy 对象【英文标题】:Handling ResultProxy objects 【发布时间】:2019-10-15 16:25:58 【问题描述】:我正在尝试查询名为“books”的表并使用原始 sql 来获取书名。目前,该表有 5 列:id、isbn、title、author、p_year。查询返回给我一个 ResultProxy 对象,我无法找到从中提取标题的方法
@app.route("/", methods=['GET', 'POST'])
@app.route("/home", methods=['GET', 'POST'])
def home():
form = SearchForm()
if form.validate_on_submit():
results = db.engine.execute("""
select * from books where title like '%% + form.input.data + %%'
""")
print(list(results))
return render_template('home.html', form=form)
我实际上是否正确使用了查询?我在一门课程中,课程要求明确规定我应该使用原始 SQL。顺便说一句,我正在使用 SQLAlchemy
【问题讨论】:
【参考方案1】:假设您使用的是SQLAlchemy?如果是这样,你可以尝试这样的事情:
results = results.fetchall()
for result in results:
...
【讨论】:
我已经试过了。它返回一个错误,指出它不可迭代 results.fetchall() 返回什么?它可能只是一行,导致可迭代错误。 当我运行你的代码时返回这个:TypeError: 'dict' object does not support indexing【参考方案2】:我自己找到了解决方案。如果您想使用 SQLAlchemy 查询数据库表以查找用户输入的匹配项,请执行以下操作:
form = SearchForm()
results = Book.query.filter(Book.title.ilike('%%' + form.input.data + '%')).all()
for result in results:
print(f"result.title, result.author, result.p_year")
这里,(Book) 是模型中的表名,第一行返回一个列表对象,您可以逐个循环。 (title, author, p_year) 是我表中的列名,我正在使用表单来创建搜索栏
【讨论】:
以上是关于处理 ResultProxy 对象的主要内容,如果未能解决你的问题,请参考以下文章
sqlalchemy.engine.result.resultproxy 怎么转为字符串