我正在尝试构建一个在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')
,我似乎无法工作,直到我知道我将运行哪个数据库。
是否有另一种使用声明性模型动态设置表模式的方法?更改元数据的方法是错误的吗?