我一直在努力了一段時間了,並沒有找到答案,或者我已經看到了答案,只是沒有得到它 - 但是,我希望我能夠描述我的問題。sqlalchemy映射表從mssql數據庫與「前綴命名空間」
我有一個MS SQL數據庫,在這個數據庫中,表被分組到命名空間(或任何它被稱爲)中,由Prefix.Tablename(帶點)表示。因此,請求一些內容的原生SQL語句如下所示:
SELECT TOP 100
[Value], [ValueDate]
FROM [FinancialDataBase].[Reporting].[IndexedElements]
如何將此映射到sqlalchemy? 如果「報告」前綴不會在那裏,該溶液(或做這件事)是這樣的:
from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base, declared_attr
from sqlalchemy.orm import sessionmaker
def get_session():
from urllib.parse import quote_plus as urllib_quote_plus
server = "FinancialDataBase.sql.local"
connstr = "DRIVER={SQL Server};SERVER=%s;DATABASE=FinancialDataBase" % server
params = urllib_quote_plus(connstr)
base_url = "mssql+pyodbc:///?odbc_connect=%s" % params
engine = create_engine(base_url,echo=True)
Session = sessionmaker(bind=engine)
session = Session()
return engine, session
Base = declarative_base()
class IndexedElements(Base):
__tablename__ = "IndexedElements"
UniqueID = Column(String,primary_key=True)
ValueDate = Column(DateTime)
Value = Column(Float)
,然後請求可以做,幷包裹在一個熊貓數據幀例如是這樣的:
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]
由於命名空間前綴它禾ULD必須
FROM [FinancialDataBase].[Reporting].[IndexedElements]
簡單的表名擴大到
__tablename__ = "Reporting.IndexedElements"
犯規修復它,因爲它改變了編譯的SQL語句
FROM [FinancialDataBase].[Reporting.IndexedElements]
其正常不工作。
那麼這怎麼解決呢?
您正在尋找的術語是[模式](https://technet.microsoft.com/zh-cn/library/dd283095(v = sql。 100)的.aspx)。 SQLAlchemy支持將[元數據](http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.MetaData.params.schema)中的架構作爲要使用的默認架構,並且[每個表](http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Table.params.schema)。使用Declarative,您應該在['__table_args__'](http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/table_config.html#table-configuration)中傳遞每個表模式。 –
非常多相關:https://stackoverflow.com/questions/30538132/sqlalchemy-declarative-schemas-in-sql-server-and-foreign-primary-keys –
謝謝Ilja,「模式」釘了它!我將創建一個答案,提及您的評論! – joaquinn