为什么使用命名参数时 Flask-SQLAlchemy 查询会失败?

问题描述 投票:0回答:1

我正在使用客户 ID 和姓名列表填充下拉列表(对于 EHR)。

在 get_client 路由中,用户选择一个客户端,client_id(fk)被传递到 Progress_view 路由,该路由查询一系列进度注释,这些进度注释将被传递到 Progress_view.html 模板。

模板的滚动 div 为空 - 没有 stderr,但没有数据。我尝试传递命名参数、session['client_id'] 值和request.args.get('client_id')。为了排除故障,我将 client_id 作为标量与数组一起传递给模板:

return render_template('progress_view.html', notes=results, client_id=client_id)

无论我如何传递参数,它都会显示在模板顶部,因此正在被解析。 (?) 接下来,我尝试在 SQLAlchemy 中使用不同的语法,结果相同 - 没有数据。因此,当 client_id 被硬编码时,我创建了 Progress_test 路由。这会填充模板的滚动 div 并打印 client_id。我不知道如何继续。

这是我的路线:

def get_client():

    clients = db.session.query(MPI).filter().all()

    if request.method == "POST":
        client_id = request.form.get("client_id")

        if client_id:
            session['client_id'] = client_id
            # return render_template('progress_view.html', client_id=client_id)
            return redirect(url_for("chart.progress_view"))

    return render_template('get_client.html', clients=clients)

# @chart.route('/progress_view/<client_id>', methods=["GET", "POST"])
@chart.route('/progress_view', methods=["GET", "POST"])
@login_required
def progress_view():


    # client_id = request.args.get('client_id')
    client_id = session['client_id']
    client_id = int(client_id)

    # from sqlalchemy import select
    # sth = select(ProgressNote.unitname, ProgressNote.staffname, ProgressNote.notedate, ProgressNote.notebody).where(ProgressNote.client_id == client_id)
    # results = db.session.execute(sth)

    results = db.session.query(ProgressNote).filter(ProgressNote.client_id == client_id).all()

    return render_template('progress_view.html', notes=results, client_id=client_id)

@chart.route('/progress_test', methods=["GET", "POST"])
@login_required
def progress_test():

    client_id = 3
    from sqlalchemy import select
    sth = select(ProgressNote.unitname, ProgressNote.staffname, ProgressNote.notedate, ProgressNote.notebody).where(ProgressNote.client_id == client_id)
    results = db.session.execute(sth)

    return render_template('progress_view.html', notes=results, client_id=client_id)

模板:

  <div id="logview">
  <table style="border: 0px solid black; border-collapse: collapse; width:999px; margin-left: auto; margin-right: auto;">
  <tbody>
  {% for note in notes %}
  <tr style="border: 1px solid black; border-collapse: collapse;" >
  <td style="border: 1px solid black; border-collapse: collapse;"><b>Unit Name:</b>  <br />{{ note.unitname }}</td>
  <td style="border: 1px solid black; border-collapse: collapse;"><b>Entered By:</b> <br />{{ note.staffname }}</td>
  <td style="border: 1px solid black; border-collapse: collapse;"><b>Note Date:</b>  <br />{{ note.notedate }}</td>
  </tr>
  <tr style="border: 1px solid black; border-collapse: collapse;" >
  <td colspan="5" style="text-align: left; border: 1px solid black; border-collapse: collapse;"><pre>{{ note.notebody}}</pre></td>
  </tr>
  <tr style="border: 0px solid black; border-collapse: collapse;" >
  <td colspan="5" style="border-collapse: collapse;">&nbsp;<br />&nbsp;<br />&nbsp;</td>
  </tr>
  {% endfor %}
  </tbody>
  </table>
  </div>

型号:

class ProgressNote(UserMixin, db.Model):
        rec_id = db.Column(db.Integer, primary_key=True)
        client_id = db.Column(db.Integer)
        chart = db.Column(db.String(80))
        unitname = db.Column(db.String(255))
        staffname = db.Column(db.String(255))
        notedate = db.Column(db.DateTime)
        notebody = db.Column(db.String)
flask-sqlalchemy
1个回答
0
投票

在我的 Perl CGI 脚本中,我使用子例程发布菜单,然后发布表单,然后执行查询。于是我想到:我真的需要两条路线吗?不,这有效:

@chart.route('/progress_view', methods=["GET", "POST"])
@login_required
def progress_view():

    clients = db.session.query(MPI).filter().all()

    if request.method == "POST":
        client_id = request.form.get("client_id")

        if client_id:
            results = db.session.query(ProgressNote).filter(ProgressNote.client_id == client_id).all()
            return render_template('progress_view.html', notes=results, client_id=client_id)

    return render_template('get_client.html', clients=clients)
© www.soinside.com 2019 - 2024. All rights reserved.