如何从flask-sqlalchemy数据库获取数据

时间:2020-06-05 15:03:43

标签: python web flask flask-sqlalchemy backend

使用flask-sqlalchemy从数据库获取数据时遇到问题。我想为每个人获取“答案”,并在管理面板中显示它们。我创建了一个具有关系(一对多)关系的数据库,并且一切正常,但是无法在我的网站上打印它们。少说话,多编码。

这是我的数据库代码

class User(db.Model,UserMixin):
  id = db.Column(db.Integer, primary_key=True)
  username = db.Column(db.String(20), unique=True, nullable=False)    
  password = db.Column(db.String(60), nullable=False)
  answers = db.relationship('Answer', backref='author', lazy=True)

def __repr__(self):
    return f"User('{self.username}', '{self.password}')"


class Answer(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
  day = db.Column(db.Text, nullable=False)
  user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

def __repr__(self):
    return f"Post( '{self.date_posted}')"

这是我的路线代码(别无选择,只要相信我,我已经尝试了一切)

@app.route('/users')
def users():
   users = User.query.all()
   fusernames = User.query.order_by(User.username).all()
   answers = Answer.query.filter_by(day = fusernames)
   return render_template('users.html',users=users,answers=answers)

这是我的html模板

{% extends "admin.html" %}
{% block content %}
{% for user in users %}

<div class="contentUsers">
<div class="Userbox">
<div class="login">Login: {{user.username}}</div>
<div class="passwordUser"> Hasło: {{user.password}}</div> 
<div class="AnswersDays">Day1: </div>   
<div class="answers">{{ user.answers }}</div>
</div> 
</div>
{% endfor %}
{% endblock content %}

因此,我想显示用户提供的所有答案。我检查了一下,一切正常,但是我不知道如何为确切的用户显示确切的答案。您在这里有网站的图片(不要大声笑) website

我必须承认我是新来的,所以它可能非常简单,但是我确实检查了所有内容,阅读了整个文档,看了几十个教程,什么也没看。 某些代码可能很奇怪,但我正在尽力而为。

1 个答案:

答案 0 :(得分:1)

由于您已经在User模型和Answer模型之间创建了一对多关系。调用关系属性user.answers时,将获得Answer对象的列表,如在模板中看到的那样。要显示这些答案的所有信息,您必须添加一个for循环。只需替换此行

<div class="answers">{{ user.answers }}</div>

具有:

<div class="answers">
    <ul>
    {% for answer in user.answers %}
        <li>{{ answer.day}} - {{ answer.date_posted }}</li>
    {% endfor %}
    </ul>
</div>