2015-11-04 41 views
1

是否有可能使SQLAlchemy跨服務器連接?跨服務器在SQLAlchemy中選擇

如果我試圖像

engine = create_engine('mssql+pyodbc://SERVER/Database') 

query = sql.text('SELECT TOP 10 * FROM [dbo].[Table]') 

with engine.begin() as connection: 
    data = connection.execute(query).fetchall() 

它的工作原理,我期望運行的東西。如果我更改查詢以從[OtherServer].[OtherDatabase].[dbo].[Table]中選擇,則會收到一條錯誤消息"Login failed for user 'NT AUTHORITY\\ANONYMOUS LOGON"

+0

當您需要在連接到不同服務器的服務器上執行查詢時,情況很奇怪。爲什麼你不能只有兩個單獨的連接? – max

+0

是的。實際的查詢是在執行'INSERT INTO',以及像首先截斷表一樣的體操,並使用'TABLOCKX'。需要通過一個連接來完成。 – Batman

回答

0

mssql+pyodbc://SERVER/Database?trusted_connection=yes當我嘗試時發生錯誤。儘管如此,它確實指向了我的正確方向。

from sqlalchemy import create_engine, sql 
import urllib 

string = "DRIVER={SQL SERVER};SERVER=server;DATABASE=db;TRUSTED_CONNECTION=YES" 
params = urllib.quote_plus(string) 
engine = create_engine('mssql+pyodbc:///?odbc_connect={0}'.format(params)) 


query = sql.text('SELECT TOP 10 * FROM [CrossServer].[datbase].[dbo].[Table]') 

with engine.begin() as connection: 
    data = connection.execute(query).fetchall() 
0

如果您想通過一個連接更改不同的服務器,這會非常複雜。 但是,如果您需要使用不同的憑據對不同的服務器執行查詢,則應首先使用sp_addlinkedserver添加鏈接的服務器。然後應該用sp_addlinkedsrvlogin將憑據添加到鏈接的服務器。你試過這個嗎?

+0

是的。服務器已鏈接。我可以在SQL Server中運行查詢。 – Batman

1

看起來像是你如何驗證SQL服務器的問題。我相信你可以連接使用當前的Windows用戶,URI語法然後mssql+pyodbc://SERVER/Database?trusted_connection=yes(我從來沒有測試過,但試試看)。

另一種選擇是創建一個SQL服務器登錄名(即在SQL服務器中定義的用戶名/密碼,而不是Windows用戶),並在連接時使用SQL Server登錄名。

數據庫URI然後變成:mssql+pyodbc://username:[email protected]/Database