【发布时间】:2016-03-14 13:45:55
【问题描述】:
我想使用 Python Pyramid Framework 和 SQL Alchemy 处理多个数据库。
我有 1 个包含用户信息的数据库,以及多个存储应用程序信息的数据库(具有相同的结构)。每个用户在登录时选择一个数据库,并且只显示来自该数据库(而不是其他数据库)的信息。
我应该如何构建我的代码?
我正在考虑将 dbname 保存在会话中,并在每次请求时检查所选数据库的用户权限并生成一个新的 db 会话。所以我的观点看起来像(伪代码):
@view_config(route_name='home', renderer='json')
def my_view_ajax(request):
try:
database = int(request.GET['database'])
# check user permissions from user database
engine = create_engine('postgresql://XXX:XXX@localhost/'+database)
DBSession.configure(bind=engine)
items = DBSession.query('table').all()
except DBAPIError:
return 'error'
return items
我应该使用每个请求的用户信息生成一个新的数据库会话吗?还是有更好的办法?
谢谢
【问题讨论】:
-
在每个请求上创建一个新连接可能会非常昂贵,尽管这取决于您正在编写的 API 的类型 - 如果它触发一个需要几分钟才能完成的进程,那么它会我猜可以忽略不计。前段时间我问过一个类似的问题:stackoverflow.com/questions/13372001/… - 最终使用了具有多个命名空间的单个数据库,每个用户帐户一个。
-
我喜欢你的方法,我会试一试,谢谢。
标签: python database sqlalchemy pyramid