我正在嘗試使用'pandas.read_sql_query'將數據從MS SQL Server複製到一個pandas DataFrame中。我需要在我的SQL查詢中執行多個連接。加入的表位於同一臺服務器上,但位於不同的數據庫中。我傳遞給熊貓的查詢在MS SQL Server Management Studio中正常工作。在Jupyter筆記本我想查詢像數據,以便(使事情可讀查詢本身就被簡化爲2聯接和通用名稱使用):如何使用sqlalchemy + pyodbc和MS SQL Server中的多個數據庫爲pandas read_sql創建sql鍊金術連接?
import pandas as pd
import sqlalchemy as sql
import pyodbc
server = '100.10.10.10'
driver = 'SQL+Server+Native+Client+11.0'
myQuery = '''SELECT first.Field1, second.Field2
FROM db1.schema.Table1 AS first
JOIN db2.schema.Table2 AS second
ON first.Id = second.FirstId
'''
engine = sql.create_engine('mssql+pyodbc://{}?driver={}'.format(server, driver))
df = pd.read_sql_query(myQuery, engine)
這並不工作,並返回一個錯誤:
DBAPIError: (pyodbc.Error) ('IM010', '[IM010] [Microsoft][��������� ��������� ODBC] ������� ������� ��� ��������� ������ (0) (SQLDriverConnect)')
看來這個問題是不包括有關數據庫信息的引擎,因爲一切工作正常使用下一個樣的代碼,在那裏我包括數據庫引擎:
myQuery = 'select Field1 from schema.Table1'
db = 'db1'
engine = sql.create_engine('mssql+pyodbc://{}/{}?driver={}'.format(server, db, driver))
df = pd.read_sql_query(myQuery, engine)
但像破裂的代碼上面加入,如果我不包括在引擎數據庫,但它添加到查詢就像這樣:
myQuery = 'select Field1 from db1.schema.Table1'
engine = sql.create_engine('mssql+pyodbc://{}?driver={}'.format(server,
driver))
df = pd.read_sql_query(myQuery, engine)
所以,我應該怎麼指定pandas.read_sql_query「SQL」和當我需要連接來自不同數據庫但同一服務器的表時,這種情況下,'con'參數在 ?
P.S.我只能讀取訪問此服務器的連接。我無法創建新的表格或視圖或類似的東西。
更新: MS SQL Server版本是2008 R2。
更新2:我使用Python 3.6和Windows 10
什麼是您的MS SQL Server版本? – MaxU
@MaxU它是2008 R2。 –
嘗試'SQL +服務器+本機+客戶端+ 10.0'作爲驅動程序... [相關問題](http:// stackoverflow。com/a/41729710/5741205) – MaxU