【发布时间】:2018-04-05 13:59:48
【问题描述】:
我正在尝试构建一个在 postgres 和 sqlite 中运行的声明性表。表之间的唯一区别是 postgres 表将在特定模式中运行,而 sqlite 则不会。到目前为止,我已经使用下面的代码构建了没有架构的表。
metadata = MetaData()
class Base(object):
__table_args__ = {'schema': None}
Base = declarative_base(cls=Base, metadata=metadata)
class Configuration(Base):
"""
Object representation of a row in the configuration table
"""
__tablename__ = 'configuration'
name = Column(String(90), primary_key=True)
value = Column(String(256))
def __init__(self, name="", value=""):
self.name = name
self.value = value
def build_tables(conn_str, schema=None):
global metadata
engine = create_engine(conn_str, echo=True)
if schema:
metadata.schema=schema
metadata.create_all(engine)
但是,每当我尝试在 build_tables() 中设置架构时,新构建的表中似乎都没有设置架构。只有当我最初将架构设置为 metadata = MetaData(schema='my_project') 时,它似乎才有效,在我知道我将运行哪个数据库之前我不想这样做。
还有其他方法可以使用声明性模型动态设置表架构吗?更改元数据是错误的方法吗?
【问题讨论】:
-
@IljaEverilä 在您引用的问题中接受的答案是暗示该问题的 OP 所说的确切内容不起作用。很难看出这怎么可能是重复的。
-
这是一个很好的问题,也是谷歌为数不多的(如果不是唯一的)结果之一。在尝试在不同应用程序之间重用模型时,我遇到了类似的情况。我需要替换 Base tho 并尝试动态创建新类型。你找到答案了吗?
标签: python sqlalchemy