gpt4 book ai didi

python - 如何为 SQLAlchemy 中的所有表设置公共(public)前缀

转载 作者:太空狗 更新时间:2023-10-30 02:28:04 24 4
gpt4 key购买 nike

我知道有一种方法可以检测 SQLAlchemy 以在所有 前添加通用 prefix,是否可以将通用 prefix 添加到所有表名都来自单个declarative_base

最佳答案

使用declared_attr和一个自定义的 Base,如下所示:

from sqlalchemy.ext.declarative import declared_attr

class PrefixerBase(Base):

__abstract__ = True

_the_prefix = 'someprefix_'

@declared_attr
def __tablename__(cls):
return cls._the_prefix + cls.__incomplete_tablename__


class SomeModel(PrefixerBase):

__incomplete_tablename__ = 'sometable'
...

__abstract__标记的类不会创建表或映射器,并且可以充当扩展的声明基础。

您还可以使用自定义元类 (originally described here) 使其更加隐式:

from sqlalchemy.ext.declarative.api import DeclarativeMeta


class PrefixerMeta(DeclarativeMeta):

def __init__(cls, name, bases, dict_):
if '__tablename__' in dict_:
cls.__tablename__ = dict_['__tablename__'] = \
'someprefix_' + dict_['__tablename__']

return super().__init__(name, bases, dict_)

Base = declarative_base(metaclass=PrefixerMeta)


class SomeModel(Base):

__tablename__ = 'sometable'
...

关于python - 如何为 SQLAlchemy 中的所有表设置公共(public)前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38245145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com