您应该创建一个模型类,就像 Joomla 所做的那样:
class User(Base):
...
然后您可以使用 SQLAlchemy 的通用功能,并查询您需要的用户,
使用主键:
user = session.query(User).get(user_id)
或使用唯一的用户名/电子邮件:
user = session.query(User).filter(User.username==my_username).first()
说到为当前 HTTP 请求登录的用户,Web 框架通常会自动为您提供一个实例,将其传递给您正在实现的 HTTP 请求处理程序。例如,Django 框架从它自己的 ORM 开箱即用地为您提供用户实例,因为它具有所有身份验证和会话功能。我还将 Flask 微框架与 Flask-login 模块和 SQLAlchemy 一起使用,并且您需要实现一个回调,它通过用户 ID 加载用户实例,就像我之前说的:
@login_manager.user_loader
def load_user(userid):
# just query for user
return User.query.get(userid) # User.query is Flask-SQLAlchemy extension, it's same to session.query(User).get(userid)
然后您可以从线程局部变量中获取您的用户实例:
from flask.ext.login import login_required, current_user
@app.route('/hello/')
@login_required
def my_request_handler():
return "<html><body>Current user is %s</body></html>" % current_user.username
当然,如果您需要通过 Id 获取用户实例的快捷方式,您可以实现静态方法:
class User(Base):
...
@classmethod
def by_id(cls, id):
return session.query(cls).get(id)
(其中 SQLAlchemy 的会话以某种方式全局定义)
对于 Python/Web 应用程序架构,您可以查看Django——它非常流行且易于使用的一体式框架,并且它具有类似 MVC 的架构。只需阅读教程。
(但请注意,如果您希望使用 Django,Django 自己的 ORM 的功能与 SQLAlchemy 相比非常有限)。