2017-04-24 75 views
-1

我正在学习使用烧瓶中的数据库在https://www.tutorialspoint.com/flask/flask_sqlalchemy.htm 和我的问题是,数据不显示在HTML!
我的代码:
烧瓶来自sqlite数据库的sqlalchemy数据未显示

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:

​​

当我将数据添加到数据库中,ID,这是我设置为自动增量显示,但其余数据不显示。

回答

1

您在初始化功能这里 使用不一致的变量名,使用

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> 
+0

现在,它的工作原理!谢谢。对不起,我是初学者,但你能解释他们为什么应该是相同的吗? – Sangwon

+0

它就像一个类结构,一旦你指定了一个属性名称,就使用相同的名称来引用该属性,在你的初始代码中你没有在你的模型中指定_num_和_name_字段,而你的stu_num和stu_name字段没有在__init__函数中设置。 – ebd

1

的SQLAlchemy提供了一个__init__功能为你这需要创建新的对象,初始化场,数据库等通过编写自己的__init__的照顾,你要重写的SQLAlchemy的 __init __(),并阻止它做它的事!

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

(或者,如果有你想在__init__做的东西,那么请确保调用超().__ init__前或做什么,那就是你想做的事了。)

(但要启动,只需试图摆脱它......)