SQLAlchemy多模式支持

时间:2015-06-03 17:35:40

标签: python python-2.7 sqlalchemy database-schema

我正在尝试创建数据库API,我正在使用Python 2.7和SQLAlchemy。

API必须支持多种数据库平台,包括MSSQL,MySQL,PostgreSQL和SQLite。

使其成为多平台的问题在于,每个数据库对“模式”一词的理解略有不同。基本上,如果我连接到MSSQL数据库,我想要包含或设置模式,但如果我连接到SQLite数据库,我不会。

另一个问题是我在SQLAlchemy中使用declarative_base,并且在我知道我连接到哪种类型的数据库之前,已经使用模式规范创建了类。 (用户将在脚本开始运行后连接到数据库。)所以我不知道要为表分配什么类型的模式。

以下是我的代码的简化示例:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Methods(Base):
    __tablename__ = 'methods'
    __table_args__ = {u'schema': 'sname'}

    MethodID = Column('methodid', Integer, primary_key=True, nullable=False)
    MethodTypeCV = Column('methodtypecv', nullable=False, index=True)
    MethodCode = Column('methodcode', String(50), nullable=False)
    MethodName = Column('methodname', String(255), nullable=False)
    MethodDescription = Column('methoddescription', String(500))
    MethodLink = Column('methodlink', String(255))
    OrganizationID = Column('organizationid', Integer)

我已经尝试了很多东西,包括在创建类之后设置架构但是不起作用。我也尝试使用反射但我无法弄清楚如何让它与陈述基础。

有没有办法使用反射或全局变量或某些东西能够在运行时更改架构,一旦我连接到数据库并知道架构将是什么?

1 个答案:

答案 0 :(得分:0)

我能够找到一种在运行时更改架构的方法!我在以下帖子中找到了答案:

sqlalchemy dynamic schema on entity at runtime