【发布时间】:2010-11-21 11:31:49
【问题描述】:
我目前正在开发一个 Wikipedia API,这意味着我们有一个 我们要使用的每种语言的数据库。每个结构 数据库是相同的,它们只是语言不同。唯一的 此信息存储的位置在数据库的名称中。
从一种语言开始时,直接使用 表到所需类(例如页面)之间的映射看起来不错。 我们定义了一个引擎和相应的元数据。当我们添加一个 第二 具有自己的引擎和元数据设置的数据库,我们遇到了 以下错误:
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.
我找到了一个email saying that there must be at least one primary mapper,所以对所有数据库都使用这个选项似乎不可行。
下一个想法是使用分片。为此,我们需要一种方法 区分 从实例的角度来看数据库之间的关系,如noted in the docs:
"你需要一个可以返回的函数 给定实例的单个分片 ID 得救;这就是所谓的 “shard_chooser”
我被困在这里。有没有办法获得给定的数据库名称 目的 它是从哪里加载的?或者可以添加基于静态属性的 引擎?另一种方法是向每个 丑陋的桌子。 我是否在监督其他可能性?任何想法如何定义多个 同一类的映射器,映射到不同的表 数据库?
【问题讨论】:
标签: sqlalchemy orm multiple-databases