处理 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 怎么转为字符串

SQLAlchemy execute() 将 ResultProxy 作为元组返回,而不是 dict

java 对象处理的工具类:处理对象

处理对象内对象的照明

面向对象——11-处理对象

R语言笔记 处理对象的函数