gpt4 book ai didi

python - flask + SQLAlchemy : Class not Iterable

转载 作者:太空宇宙 更新时间:2023-11-03 14:21:29 33 4
gpt4 key购买 nike

我在尝试将 SQLAlchemy 查询呈现到模板中时遇到问题,我得到的错误是:

TypeError: 'Users' object is not iterable

数据库是sqlite
我一直在关注 youtube 上的“发现真正的 Python”教程,它提供了很大的帮助。我唯一改变的是在教程中他使用“BlogPosts”,而我使用“Users”

我想了解他如何让用户在模板中迭代他的代码版本。

我的 Models.py 文件是这样的:

from app import db

class Users(db.Model):
__tablename__="users"

id= db.Column(db.Integer, primary_key=True)
username=db.Column(db.String, nullable=False)
password=db.Column(db.String, nullable=False)

def __init__(self, username, password):
self.username=username
self.password=password

def __repr__(self):
return '<username{}'.format(self.username)

和我的“app.py”文件。

from flask import Flask, render_template, redirect, url_for, request, session, flash
from functools import wraps
#import sqlite3
from flask.ext.sqlalchemy import SQLAlchemy


app= Flask(__name__)

app.secret_key="this is the secret key"
#app.database="users.db"

app.config['SQLALCHEMY_DATABASE_URI']='sqlite:////users2.db'

db=SQLAlchemy(app)

from models import *

def login_required(f):
@wraps(f)
def wrap(*args, **kwargs):
if 'logged_in' in session:
return f(*args, **kwargs)
else:
flash('You must be logged in to complete this action')
return redirect(url_for('login'))
return wrap


@app.route('/')
def index():
users= db.session.query(Users).all()
return render_template('index.html', users=users)


@app.route('/testing')
def testing():
users= db.session.query(Users).all()
return render_template('testquery.html', users=users)


@app.route('/welcome')
def welcome():
return render_template('index.html')


@app.route('/login', methods =['GET', 'POST'])
def login():
error= None
#form = LoginForm(request.form)
if request.method == 'POST':
#if request.form.validate_on_submit():
if request.form['username'] !='admin' or request.form['password'] !='admin':
error= 'invalid credentials'
else:
session ['logged_in']=True
flash('login successful')
return redirect(url_for('loggedin'))
#else:
#render_template('login.html', form=form, error=error)
return render_template('login.html', error=error)


@app.route('/loggedin')
@login_required
def loggedin():
return render_template('loggedin.html')


@app.route('/logout')
def logout():
session.pop('logged_in', None)
flash('You have been logged out')
return redirect(url_for('welcome'))


#def connect_db():
# return sqlite3.connect(app.database)

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

我一直使用的文本方法是“/testing”的路由,testquery.html 文件是我一直试图测试的,并且一直在出错。

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>


<table>
{%for user in users%}
<tr>
<td>{{user.username}}</td>
<td>{{user.password}}</td>
</tr>

</table>
{%endfor%}

</body>
</html>

我尝试了我在另一个堆栈问题中看到的修复:

def __init__(self, username, password):
self.username=[username]
self.password=[password]

无济于事,这没有任何改变。任何人都知道我需要做什么才能使其可迭代。

最佳答案

测试 中,您没有用户列表。您在这里有一个用户:

users = db.session.query(Users).first()

这只返回数据库中的第一个用户。因此,您也不能遍历用户。将其重命名为 user(删除 s)并删除模板中的循环:

@app.route('/testing')
def testing():
user = db.session.query(Users).first()
return render_template('testquery.html', user=user)

<table>
<tr>
<td>{{user.username}}</td>
<td>{{user.password}}</td>
</tr>
</table>

关于python - flask + SQLAlchemy : Class not Iterable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27367234/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com