我正在尝试创建数据库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)
我已经尝试了很多东西,包括在创建类之后设置架构但是不起作用。我也尝试使用反射但我无法弄清楚如何让它与陈述基础。
有没有办法使用反射或全局变量或某些东西能够在运行时更改架构,一旦我连接到数据库并知道架构将是什么?