Hi *,
I am currently working on a Wikipedia API which means that we have a
database for each language we want to use. The structure of each
database is identical, they only differ in their language. The only
place where this information is stored is in the name of the database.

When starting with one language the straight forward approach to use a
mapping between the tables to needed classes (e.g. Page) looked fine.
We defined an engine and corresponding metadata. When we added a
second
database with its own setup for engine and metadata we ran into the
following error:

------
ArgumentError: Class '<class 'wp.orm.types.pages.Page'>' already has a
primary mapper defined. Use non_primary=True to create a non primary
Mapper.  clear_mappers() will remove *all* current mappers from all
classes.
------

I found an email saying that there must be at least one primary
mapper,
so using this option for all databases doesn't seem feasible. [1]

The next idea is to use sharding. For that we need a way to
distinguish
between the databases from the perspective of an instance, as noted in
the docs [2]:
"You need a function which can return a single shard id, given an
instance to be saved; this is called "shard_chooser"

I am stuck here. Is there a way to get the database name given an
Object
it is loaded from? Or a possibility to add a static attribute based on
the engine? The alternative would be to add a language column to every
table which is just ugly.
Am I overseeing other possibilities? Any ideas how to define multiple
mappers for the same class, that map against tables in different
databases?
Best Regards,
Johannes Knopp

[1]http://www.mail-archive.com/sqlalchemy@googlegroups.com/
msg08221.html
[2]http://www.sqlalchemy.org/trac/browser/sqlalchemy/trunk/examples/
sharding/attribute_shard.py

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to