请问我在第一个 sqlachemy 应用中遇到此问题。我试图查询posgres的db并返回匹配的行。以下是我的代码。
app.py
from sqlalchemy.orm import sessionmaker
from models.models import Base,User,Product,ProductItem,DATABASE, initialize
engine = DATABASE
Base.metadata.bind = (engine)
DBSession = sessionmaker(bind=engine)
session = DBSession()
....
@app.route('/login', methods = ['GET','POST'])
def login():
form = RegisterForm.LoginForm()
if request.method == 'GET':
return render_template('login.html', form=form)
return authenticate(form = form)
def authenticate(form):
if form.validate_on_submit():
try:
user = session.query(User).filter(User.email == 'xxxx@yahoo.com')
if session.query(exists().where(User.email == form.email.data)).scalar() :
return user.name
except :# models.DoesNotExist:
flash("Your email or password does not match !", "error")
return 'error'
我的模块位于单独的文件夹模块中
模块/ modules.py
#declarations
Base = declarative_base()
engine = create_engine('postgresql://postgres:0102443167@localhost:5432/postgres',echo=True)
Base.metadata.bind = (engine)
DBSession = sessionmaker(bind=engine)
session = DBSession()
DATABASE = engine
class User(UserMixin , Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
title = Column(CHAR(3), nullable = False)
fname = Column(String(100), nullable = False)
lname = Column(String(100), nullable = False)
username = Column(String(100), nullable = False, unique = True)
email = Column (String(50), nullable =False, unique = True)
password = Column(String(100), nullable = False)
address = Column(String(250), nullable = False)
state = Column(String(50), nullable = False)
is_Admin = Column(Boolean ,default = False)
is_Logged = Column(Boolean, default = False)
is_Active = Column (Boolean , default = False)
is_Block = Column(Boolean, default = False)
joined_On = Column(ArrowType)
......
我的问题在于app.py
身份验证方法。代码
user = session.query(User).filter(User.email == form.email.data)
提出错误。当我检查form.email.data
时返回正确的字符串。但是,当我尝试
if session.query(exists().where(User.email == form.email.data)).scalar() :
return 'Ok'
按预期工作。它工作得很完美,因此让我意识到问题可能与我的查询有关。然后我尝试了
if session.query(exists().where(User.email == form.email.data)).scalar() :
return user.lname
并且它引发错误,说用户没有应该具有的属性名称。我很困惑。请问如何从我的表中查询记录?任何帮助将不胜感激
答案 0 :(得分:1)
您必须获取与查询匹配的第一个对象,因此您必须在查询末尾添加.first()
:
user = session.query(User).filter(User.email == form.email.data).first()
请参阅here更多信息。