It's not too bad, but you have to do your own custom app setup, and
modify your init_model stuff to create multiple transaction manager.

app_cfg.py:

from webapp.model import init_model
from sqlalchemy import engine_from_config
from tg.configuration import AppConfig, Bunch
from pylons import config as pylons_config

class MyAppConfig(AppConfig):
    def setup_sqlalchemy(self):
        """Setup SQLAlchemy database engine"""
        users_engine = engine_from_config(pylons_config,
'sqlalchemy_users.')
        samples_engine = engine_from_config(pylons_config,
'sqlalchemy_samples.')
        config['pylons.app_globals'].sa_engine = users_engine
        config['pylons.app_globals'].sa_users_engine = users_engine
        config['pylons.app_globals'].sa_samples_engine =
samples_engine

        # Pass the engine to initmodel, to be able to introspect
tables
        init_model(users_engine, samples_engine)

base_config = MyAppConfig()
...

model/__init__.py:

import model.users
import model.samples

from model.users.mappers import *
from model.samples.mappers import *

from zope.sqlalchemy import ZopeTransactionExtension
from sqlalchemy.orm import scoped_session, sessionmaker

# Global session manager.  DBSession() returns the session object
# appropriate for the current web request.
maker = sessionmaker(autoflush=True, autocommit=False,
                     extension=ZopeTransactionExtension())

DBSession = UsersDBSession = scoped_session(maker)
maker3 = sessionmaker(autoflush=True, autocommit=False,
                     extension=ZopeTransactionExtension())

SamplesDBSession = scoped_session(maker3)
from model.users.metadata import metadata as users_metadata
from model.samples.metadata import metadata as samples_metadata

def init_model(users_engine, samples_engine):
    """Call me before using any of the tables or classes in the
model."""

    global UsersDBSession, SamplesDBSession, users_metadata,
samples_metadata

    UsersDBSession.configure(bind=users_engine)
    SamplesDBSession.configure(bind=samples_engine)

    users_metadata.bind = users_engine
    samples_metadata.bind = samples_engine


This is sort of an off-the cuff answer, we will provide a better one
in the next documentation release.

Come find me on IRC if you need some more help.

cheers.
-chris


On Jun 4, 10:31 am, Mike Driscoll <[email protected]> wrote:
> Hi,
>
> According to Mark Ramm's blog, supporting multiple databases is
> supposed to be easy 
> (seehttp://compoundthinking.com/blog/index.php/2008/07/31/10-reasons-why-...).
> So where is the documentation that says how to do it??
>
> I "think" I need to put multiple sqlalchemy.url's in my
> development.ini file. But where oh where do I set up the SA engines
> at? The model's __init__ claims to support multiple databases too
> using MetaData, but it doesn't show where to bind the engine unless
> you're supposed to use the undocumented init_model function somehow.
>
> I'm pretty sure the init_model came from Perkins. Maybe he can tell me
> where to put my call to the function and how to set it up for multiple
> databases?
>
> That would be great!
>
> Thanks,
>
> Mike
>
> On May 28, 12:47 pm, Mike Driscoll <[email protected]> wrote:
>
> > Hi,
>
> > I am having a little trouble wrapping my head around how to configure
> > my model's __init__.py file for multiple databases. I am working on an
> > application that accesses 3 databases and does reflection on select
> > tables from all three.
>
> > I assume I need to comment out this line:
>
> > metadata = DeclarativeBase.metadata
>
> > and instead create three metadata instances based on MetaData(),
> > correct?
>
> > Finally, as I understand it, I can use the "init_model" function to do
> > the mapping for some of them, but I am not understanding where to
> > create the engine object to pass to it. Also, once I have my tables
> > mapped in the function, what do I put in my real model file if
> > anything?
>
> > Hopefully that stuff makes sense. I am using Python 2.5 and TG2 in a
> > virtualenv on Windows XP.
>
> > Thanks!
>
> > Mike
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to