【问题标题】:Flask Sqlalchemy data from sqlite database not shown未显示来自 sqlite 数据库的 Flask Sqlalchemy 数据
【发布时间】:2017-09-20 18:54:34
【问题描述】:

我正在学习在 https://www.tutorialspoint.com/flask/flask_sqlalchemy.htm 使用烧瓶中的数据库 我的问题是数据没有显示在 html 上!
我的代码:

from flask import Flask, redirect, url_for, request, render_template, session, escape, flash
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///students.sqlite3'

db = SQLAlchemy(app)

class Students(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  stu_num = db.Column('Student Number', db.Integer)
  stu_name = db.Column('Name', db.String(100))

  def __init__(self, number, name):
    self.num = number
    self.name = name

@app.route('/students/')
def show_students():
  return render_template('show_students.html', students=Students.query.all())

@app.route('/addstudents/', methods=['POST', 'GET'])
def add_students():
  if request.method == 'POST':
    if not request.form['stu_num'] or not request.form['stu_name']:
      flash('Please fill in all the fields')
    else:
      student = Students(request.form['stu_num'], request.form['stu_name'])
      db.session.add(student)
      db.session.commit()
      flash('Record added')
      return redirect(url_for('show_students'))
  return render_template('add_students.html')

if __name__ == '__main__':
  db.create_all()
  app.run(debug = True)

show_students.html:

<!doctype>
  <html>
    <body>

      {% for message in get_flashed_messages() %}
        {{ message }}
      {% endfor %}

      <h2><a href="{{ url_for('add_students') }}">Add Students</a></h2>

     <table>
       <tr>
         <th>Id</th>
         <th>Student Number</th>
         <th>Name</th>
       </tr>

         {% for student in students %}
         <tr>
           <td>{{ student.id }}</td>
           <td>{{ student.num }}</td>
           <td>{{ student.name }}</td>
         </tr>
         {% endfor %}
     </table>
   </body>
 </html>

add_students.html:

<!doctype>
  <html>
    <body>

      {% for message in get_flashed_messages() %}
        {{ message }}
      {% endfor %}

      <form action="http://localhost:5000/addstudents/" method="post">
       <p>Student Number: <input type="text" name="stu_num"></p>
       <p>Student Name: <input type="text" name="stu_name"></p>
       <p><input type="submit" value="Submit"></p>
      </form>

   </body>
 </html>

当我将数据添加到数据库时,我设置为自动递增的 ID 会显示,但其余数据不会显示。

【问题讨论】:

    标签: python sqlite flask sqlalchemy jinja2


    【解决方案1】:

    SQLAlchemy 为您提供了一个 __init__ 函数,它负责创建新对象、初始化字段、数据库等。通过编写自己的 __init__,您将覆盖 SQLAlchemy 的 __init__(),并阻止它做它的事情!

    所以试着摆脱你的 __init__ 函数!

    (或者如果你想在 __init__ 中做一些事情,那么请确保在你想做的任何事情之前或之后调用 super().__init__。)

    (但要开始,请尝试摆脱它...)

    【讨论】:

      【解决方案2】:

      您在这里使用了不一致的变量名 在 init 函数中,使用

      def __init__(self, number, name):
          student.stu_num=number
          student.stu_name=name
      

      在 show_students.html 中尝试使用

      <td>{{ student.stu_num }}</td>
      <td>{{ student.stu_name }} </td>
      

      【讨论】:

      • 现在可以了!谢谢。对不起,我是初学者,但你能解释一下为什么他们的名字应该一样吗?
      • 它就像一个类结构,一旦你指定了一个属性名称,你就可以使用相同的名称来引用该属性,使用你的初始代码你没有 num 并且您的模型中指定的 name 字段,并且您的 stu_num 和 stu_name 字段未在 init 函数中设置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2015-09-20
      • 2019-07-01
      相关资源
      最近更新 更多