[Chicago] help from Django and Pylons developers
Massimo Di Pierro
mdipierro at cs.depaul.edu
Mon Apr 28 22:39:31 CEST 2008
How would you handle the case when the two databases have a table
with the same name?
Is it a problem?
Massimo
On Apr 28, 2008, at 3:27 PM, Kumar McMillan wrote:
> On Mon, Apr 28, 2008 at 3:15 PM, Kumar McMillan
> <kumar.mcmillan at gmail.com> wrote:
>> On Mon, Apr 28, 2008 at 1:18 PM, Ian Bicking <ianb at colorstudy.com>
>> wrote:
>>>> I have never a Pylons example for connecting to multiple
>>>> databases. Would
>>> you mind posting an example?
>>>>
>>
>> I can't find this documented anywhere but if you configure a Pylons
>> app with this structure (using SQLAlchemy 0.4),
> http://wiki.pylonshq.com/display/pylonsdocs/Using+SQLAlchemy+with
> +Pylons
>
> duh, an example of multiple databases is actually at the bottom of
> that same page! ;)
>
> They suggest more or less the same thing but it's a little more
> concise and the session construction is more sane ...
>
> [app:main]
> sqlalchemy.default.url = "mysql://..."
> sqlalchemy.default.pool_recycle = 3600
> sqlalchemy.log.url = "sqlite://..."
>
> default_engine = engine_from_config(config, 'sqlalchemy.default.')
> log_engine = engine_from_config(config, 'sqlalchemy.log.')
> init_model(default_engine, log_engine)
>
> ...and so on
>
>
>>
>> ... then, if you wanted to, say, connect to a read-only db and a
>> write-only db, you could update your config like this:
>>
>> [app:main]
>> # ...
>> read_db.url = postgres://read_user:pw@readhost/read_db
>> #read_db.debug = True
>> write_db.url = postgres://write_user:pw@writehost/write_db
>>
>> ... and you could change environment.py to call init_model() like:
>>
>> def load_environment(global_conf, app_conf):
>> # ...
>> read_engine = engine_from_config(config, 'read_db.')
>> write_engine = engine_from_config(config, 'write_db.')
>> init_model(read_engine, write_engine)
>>
>> ... and update the init_model() def in model/__init__.py to :
>>
>> from sqlalchemy import orm
>> from myapp.model import meta
>>
>> def init_model(read_engine, write_engine):
>> ReadSession = orm.scoped_session(orm.sessionmaker
>> (autoflush=False,
>> transactional=False, bind=read_engine))
>> meta.read_metadata.bind = read_engine
>> meta.read_session = ReadSession()
>> # setup read mappers here..
>>
>> WriteSession = orm.scoped_session(orm.sessionmaker
>> (autoflush=True,
>> transactional=True, bind=write_engine))
>> meta.write_metadata.bind = write_engine
>> meta.write_session = WriteSession()
>> # setup write mappers here..
>>
>>
>> In other words, the config file is just a place to store values, any
>> values you want, and the environment.py module gives you the
>> chance to
>> customize the initialization of your app any way you want. You
>> store
>> the initialization code wherever you want, Pylons doesn't force any
>> conventions on you other than by creating a default module layout
>> when
>> you start your project.
>>
>> Kumar
>>
> _______________________________________________
> Chicago mailing list
> Chicago at python.org
> http://mail.python.org/mailman/listinfo/chicago
More information about the Chicago
mailing list