Hey Allessandro Am Donnerstag, 26. Juli 2012 20:53:19 UTC+2 schrieb Alessandro Molina: > > Subclass the sqlalchemy.orm.Session providing a get_bind method, then > you can pass the class_ parameter to the sessionmaker inside > model/__init__.py > > Whenever the session is going to be used the get_bind method will be > called to ask for the bound engine, so you can implement there any > logic to return different engines and so route to multiple databases. >
First of all: Thank you very much. I followed your advice and it works so far. But i have a problem anyway. In the get_bind-logic i want to return the engine depending on the requested URL. At the moment i use request.environ['PATH_INFO'], but for some get_bind()-calls i got the Exception below when i try to access tg.request (and when i dont catch it). In those cases i cannot determine the DB-Engine by path. Do you have a hint? Can i maybe access the request-URL on a lower level? File > '/home/whatever/workspace/tg22env/lib/python2.6/site-packages/WebError-0.10.3-py2.6.egg/weberror/evalexception.py', > > line 431 in respond > app_iter = self.application(environ, detect_start_response) > File > '/home/whatever/workspace/tg22env/lib/python2.6/site-packages/TurboGears2-2.2.0-py2.6.egg/tg/configuration/app_config.py', > > line 894 in remover > return app(environ, start_response) > File > '/home/whatever/workspace/tg22env/lib/python2.6/site-packages/repoze.tm2-1.0-py2.6.egg/repoze/tm/__init__.py', > > line 24 in __call__ > result = self.application(environ, save_status_and_headers) > File > '/home/whatever/workspace/tg22env/lib/python2.6/site-packages/repoze.who-2.0-py2.6.egg/repoze/who/middleware.py', > > line 76 in __call__ > identity = api.authenticate() > File > '/home/whatever/workspace/tg22env/lib/python2.6/site-packages/repoze.who-2.0-py2.6.egg/repoze/who/api.py', > > line 151 in authenticate > self._add_metadata(identity) > File > '/home/whatever/workspace/tg22env/lib/python2.6/site-packages/repoze.who-2.0-py2.6.egg/repoze/who/api.py', > > line 367 in _add_metadata > plugin.add_metadata(self.environ, identity) > File > '/home/whatever/workspace/tg22env/lib/python2.6/site-packages/TurboGears2-2.2.0-py2.6.egg/tg/configuration/auth.py', > > line 51 in add_metadata > identity['user'] = self.tgmdprovider.get_user(identity, userid) > File '/home/whatever/workspace/tg22env/myapp/myapp/config/app_cfg.py', > line 92 in get_user > return > self.sa_auth.dbsession.query(self.sa_auth.user_class).filter_by(user_name=userid).first() > File 'build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py', line 2156 in > first > File 'build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py', line 2023 in > __getitem__ > File 'build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py', line 2227 in > __iter__ > File 'build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py', line 2240 in > _execute_and_instances > File 'build/bdist.linux-x86_64/egg/sqlalchemy/orm/query.py', line 2231 in > _connection_from_session > File 'build/bdist.linux-x86_64/egg/sqlalchemy/orm/session.py', line 727 in > connection > File '/home/whatever/workspace/tg22env/myapp/myapp/lib/mysession.py', line > 22 in get_bind > print request.environ['PATH_INFO'] > File > '/home/whatever/workspace/tg22env/lib/python2.6/site-packages/Paste-1.7.5.1-py2.6.egg/paste/registry.py', > > line 137 in __getattr__ > return getattr(self._current_obj(), attr) > File > '/home/whatever/workspace/tg22env/lib/python2.6/site-packages/Paste-1.7.5.1-py2.6.egg/paste/registry.py', > > line 197 in _current_obj > 'thread' % self.____name__) > TypeError: No object (name: request) has been registered for this thread > Thanks in advance, Kai -- You received this message because you are subscribed to the Google Groups "TurboGears" group. To view this discussion on the web visit https://groups.google.com/d/msg/turbogears/-/Ne5mPTvTLgUJ. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/turbogears?hl=en.

