SQLAlchemy 多模式支持
SQLAlchemy multi-schema support
我正在尝试创建一个数据库 API,我正在使用 Python 2.7 和 SQLAlchemy。
API 必须支持多种数据库平台,包括 MSSQL、MySQL、PostgreSQL 和 SQLite。
使其成为多平台的问题在于每个数据库对 'schema' 这个词的理解略有不同。基本上,如果我连接到 MSSQL 数据库,我想包含或设置模式,但如果我连接到 SQLite 数据库,我不想。
另一个问题是,我在 SQLAlchemy 中使用 declarative_base,并且在我知道要连接的数据库类型之前,已经使用模式规范创建了 classes。 (用户将在脚本启动后连接到数据库 运行。)所以我不知道要分配什么类型的模式 table。
这是我的代码的一个简化示例:
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)
我尝试了很多方法,包括在创建 class 之后设置架构,但没有 work.I 也尝试过使用反射,但我无法弄清楚如何让它与声明性基础一起工作。
一旦我连接到数据库并知道模式是什么,是否有一种方法可以使用反射或全局变量或其他方式在运行时更改模式?
我找到了一种在运行时更改架构的方法!我在下面 post:
找到了答案
sqlalchemy dynamic schema on entity at runtime
我正在尝试创建一个数据库 API,我正在使用 Python 2.7 和 SQLAlchemy。
API 必须支持多种数据库平台,包括 MSSQL、MySQL、PostgreSQL 和 SQLite。
使其成为多平台的问题在于每个数据库对 'schema' 这个词的理解略有不同。基本上,如果我连接到 MSSQL 数据库,我想包含或设置模式,但如果我连接到 SQLite 数据库,我不想。
另一个问题是,我在 SQLAlchemy 中使用 declarative_base,并且在我知道要连接的数据库类型之前,已经使用模式规范创建了 classes。 (用户将在脚本启动后连接到数据库 运行。)所以我不知道要分配什么类型的模式 table。
这是我的代码的一个简化示例:
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)
我尝试了很多方法,包括在创建 class 之后设置架构,但没有 work.I 也尝试过使用反射,但我无法弄清楚如何让它与声明性基础一起工作。
一旦我连接到数据库并知道模式是什么,是否有一种方法可以使用反射或全局变量或其他方式在运行时更改模式?
我找到了一种在运行时更改架构的方法!我在下面 post:
找到了答案sqlalchemy dynamic schema on entity at runtime