我正在使用 Flask+Python 并检查是否有 用户名 (和 电子邮件 )是否已经被采用我正在使用这个逻辑:
@app.route('/register', methods=['GET', 'POST'])
def register():
form = SignupForm()
if form.validate_on_submit():
user = Users.query.filter_by(username=form.username.data).first()
email = Users.query.filter_by(email=form.email.data).first()
if form.username.data in user:
error = 'Username already taken. Choose another'
elif form.email.data in email:
error = 'Email already registered. Login or register with another Email'
else:
user = Users(
form.username.data,
form.password.data,
#form.confirm.data ,
form.email.data,
1,
# form.cityaddress.data,
# form.countryaddress.data,
#form.accept_tos.data,
)
db.session.add(user)
db.session.commit()
return redirect(url_for('index'))
但它给出的错误是
object has no attribute 'username'
我知道我从 db 获取数据的逻辑不正确。我对 SQLalchemy 知之甚少。
你能给我建议我如何获取
Username
(和 Email
)来自表 Users
的列值然后检查它们是否与 form.username.data
相同?
最佳答案
您的查询看起来不错,来自 first()
的返回值将是您的 User 对象的实例,或 None
如果没有结果:
u = Users.query.filter_by(username=form.username.data).first()
if u is not None:
print u.username
print u.email
因此,鉴于此,您的逻辑可能如下所示:
user_by_name = Users.query.filter_by(username=form.username.data).first()
user_by_email = Users.query.filter_by(email=form.email.data).first()
if user_by_name:
error = 'Username already taken. Choose another'
elif user_by_email:
error = 'Email already registered. Login or register with another Email'
else:
#Unique user and email
您也可以在一个查询中完成:
existing = Users.query.filter((Users.username == form.username.data) | (Users.email == form.email.data)).all()
if existing:
error = 'User or email taken'
注意使用
filter
而不是 filter_by
- 你不能在 filter_by
中使用按位运算符.这是一个快速 working example
关于python - 如何使用 SQLAlchemy 获取列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15849911/