python - 如何使用 SQLAlchemy 获取列值?

标签 python database sqlalchemy flask

我正在使用 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/

相关文章:

python - 使用 groupby 过滤掉特定列中全部为 NaN 的行

python - 麻烦加载手套 840B 300d 矢量

mysql - 外键和mysql与hibernate

sql-server - 数据库服务器上的强数据库名称

database - 批量复制 - sybase

python - 为什么在使用 RoutingSession 时 SQLAlchemy Session.filter().update/delete 会引发只读异常?

python - Sqlalchemy错误,多个外键引用同一个表和列

python - SQLalchemy - 来自查询的模型

python - Django:分页器 + 原始 SQL 查询

python - Pandas:Groupby 计为列值