我有一个数据库,其中每个表都有一个所有列的公共前缀(可能是为了避免别名)。像这样:
CREATE TABLE
PERSON
(
PER_GUID RAW(16) DEFAULT SYS_GUID() NOT NULL,
PER_FIRSTNAME NVARCHAR2(50),
PER_LASTNAME NVARCHAR2(50),
PRIMARY KEY (PER_GUID)
)
现在,在将此架构映射到SQLAlchemy ORM(使用declarative_base
)时,我希望在将其映射到对象时删除前缀。
我当然可以手动完成:
class Person(Base):
__tablename__ = 'person'
guid = Column('per_guid', RAW, primary_key = True)
firstname = Column('per_firstname', String)
lastname = Column('per_lastname', String)
但除了所有冗余类型之外,这将绕过声明性映射的一些好处。基本上我需要__mapper_args__ = {'column_prefix': 'per_'}
的倒数,它是我的属性的前缀。
这样做的恰当方法是什么?我是否必须捕获一些映射事件?用自定义基类做一些事情?前缀的长度各不相同,但它们都以下划线结尾,因此通用的不需要指定的确切表前缀的东西也可以起作用。