Tho*_*our 11 python schema sqlalchemy pyramid
我是Pyramid和SQLAlchemy的新手.我正在使用SQLAlchemy开发Python Pyramid项目.我有一个简单的模型设置如下.如何在运行时使用不同的模式?这将是一个PostgreSQL数据库后端.现在,"公共"被硬编码到声明性基础模型中.我需要能够使用不同模式的相同模型.什么是最好的方法?除非我错过了,否则SQLAlchemy的文档对我来说似乎不太清楚.
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, BigInteger
__all__ = [
"LoadTender"
]
__all__.sort()
Base = declarative_base()
class LoadTender(Base):
__tablename__ = "load_tenders"
__table_args__ = {"schema": "public"}
id = Column("pkey", BigInteger, primary_key=True)
def __repr__(self):
return "" % self.id
Run Code Online (Sandbox Code Playgroud)
编辑:我似乎解决了我的问题,我正在更新片段,以显示我在下面做了什么.
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, BigInteger
__all__ = [
"LoadTender"
]
__all__.sort()
Base = declarative_base()
class ClientMixin(object):
__table_args__ = {"schema": "client_schema_name"}
class LoadTenderMixin(object):
__tablename__ = "load_tenders"
id = Column("pkey", BigInteger, primary_key=True)
def __repr__(self):
return "" % self.id
class ClientLoadTender(LoadTenderMixin, ClientMixin, Base):
pass
Run Code Online (Sandbox Code Playgroud)
jkm*_*acc 13
我认为每个架构需要一个不同的模型.__abstract__可以减少痛苦.接下来是Paul Yin的回答......
定义__abstract__LoadTender模型,因此您不必对其进行编码.
#base.py
class LoadTender(Base):
__abstract__ = True
id = ...
def __repr__ ...
Run Code Online (Sandbox Code Playgroud)在每个模式的层次结构中放置特定于模式的Base.
#schema1.py
from base import LoadTender
PublicBase = declarative_base(metadata=MetaData(schema='public'))
class LoadTender(PublicBase, LoadTender):
__tablename__ = 'load_tenders'
Run Code Online (Sandbox Code Playgroud)对其他架构执行相同操作.