使用“prefix-namespaces”将mssql数据库的表映射为sqlalchemy

2024-06-30 08:02:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这个问题上挣扎了一段时间,还没有找到答案,或者我已经看到了答案,只是没有得到答案-但是,我希望我能够描述我的问题。在

我有一个mssql数据库,在这个数据库中,表被分组在名称空间中(或者它被称为什么),用前缀.表名(带点)。因此,请求某些内容的本机sql语句如下所示:

    SELECT TOP 100 
     [Value], [ValueDate]
    FROM [FinancialDataBase].[Reporting].[IndexedElements]

如何将其映射到sqlalchemy? 如果没有“Reporting”前缀,则解决方案(或一种方法)如下所示:

^{pr2}$

然后就可以完成请求并将其包装在Pandas数据框中,例如:

import pandas as pd

engine, session = get_session()

query = session.query(IndexedElements.Value,IndexedElements.ValueDate)

data = pd.read_sql(query.statement,query.session.bind)

但在此编译并实际执行的SQL语句包含以下错误的FROM部分:

FROM [FinancialDataBase].[IndexedElements]

由于名称空间前缀,它必须

FROM [FinancialDataBase].[Reporting].[IndexedElements]

只需将表名扩展为

__tablename__ = "Reporting.IndexedElements"

不修复它,因为它将编译的sql语句更改为

FROM [FinancialDataBase].[Reporting.IndexedElements]

不能正常工作。在

那么如何解决这个问题呢?在


Tags: 答案from名称数据库sqlvaluesession空间
1条回答
网友
1楼 · 发布于 2024-06-30 08:02:31

答案见上文Ilja的评论:

“namespace”是一个所谓的模式,必须在映射对象中声明。以开场白中的示例为例,映射表的定义如下:

class IndexedElements(Base):
    __tablename__ = "IndexedElements"
    __table_args__ = {"schema": "Reporting"}

    UniqueID = Column(String,primary_key=True)
    ValueDate = Column(DateTime)
    Value = Column(Float)

或者为不同的模式定义一个包含这些信息的基类。同时检查sqlalchemy文档中的“扩充基础”: http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/mixins.html#augmenting-the-base

相关问题 更多 >