これは、すでにすべてが異なるバインドの観点からマップされているため、難しい場合があります。表の "schema"引数は "schemaname.tablename"構文のレンダリング方法ですが、これはスキーマ名なしで表にマップされている通常のクラスとは異なるマッピングされたクラスを使用することを意味します。
このように、最初はいくつかのプラットフォーム固有のテクニックにより、これはずっと簡単になりました。 Oracleを使用している場合は、Oracle CREATE SYNONYMを使用して、リモート・スキーマの「somedb.sometable」を「sometable」にマップします。 Postgresqlを使用している場合は、search_pathを操作して、複数のスキーマで特定の名前が検索されるようにします(http://www.postgresql.org/docs/8.1/static/ddl-schemas.html#DDL-SCHEMAS-PATH参照)。
どちらも問題ありませんか?それでは、http://www.sqlalchemy.org/trac/wiki/UsageRecipes/EntityNameでレシピの行に沿って何かする必要があります(残念ながら、これはエリクシールを使用していません。エリクシールの能力はどれくらいか分かりません)。詳細に応じて達成するためのさまざまな方法があります。ここでは、元のテーブルにマップされた新しい、匿名クラスを行います一つの方法です:
# regular class
class ClassOne(Base):
__tablename__ = 'one'
id = Column(Integer, primary_key=True)
class ClassTwo(Base):
__tablename__ = 'two'
id = Column(Integer, primary_key=True)
def map_to_alt_tb(cls, metadata, schemaname):
m = class_mapper(cls)
cls2 = type(
"AltClass",
(object,),
{}
)
table = m.local_table.tometadata(metadata, schemaname)
mapper(cls2, table)
return cls2
alt_cls = map_to_alt_db(ClassTwo, somemetadata, "alt_schema")
map_to_alt_db()
は、新しいにマップし、それは「alt_schema」へのスキーマです変更、ClassTwo
がマッピングされるテーブルを引き出しますクラス。
しかし、このアプローチは、特別なものはどれもClassTwo
で失われます。必要な場合は、そのwikiページにある特定のアプローチをさらに行うことができます。