2013-04-01 64 views
8

我想在Python 3.3(Windows 7-64位)上使用SQLAlchemy(使用pyodbc)連接到SQL Server 2012數據庫。我能夠使用直接pyodbc連接,但在使用SQLAlchemy進行連接時不成功。我有用於數據庫訪問的dsn文件設置。使用sqlalchemy和pyodbc連接到SQL Server 2012

我成功地連接使用直pyodbc是這樣的:

con = pyodbc.connect('FILEDSN=c:\\users\\me\\mydbserver.dsn') 

對於SQLAlchemy的我曾嘗試:

import sqlalchemy as sa 
engine = sa.create_engine('mssql+pyodbc://c/users/me/mydbserver.dsn/mydbname') 

create_engine方法實際上並沒有建立連接和成功,但 i如果我嘗試導致sqlalchemy實際設置連接(如engine.table_names()),但需要一段時間但返回此錯誤:

DBAPIError: (Error) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect)') None None

我不知道哪裏出了問題是如何看到什麼連接字符串實際上是由sqlalchemy傳遞給pyodbc。我已經用SQLite和MySQL成功地使用了相同的sqlalchemy類。

在此先感謝!

回答

21

基於文件的DSN字符串被SQLAlchemy解釋爲服務器名稱= c,數據庫名稱= users

我更喜歡在不使用DSN的情況下進行連接,這是代碼遷移過程中處理的少一個配置任務。

這句法作品使用Windows身份驗證:

engine = sa.create_engine('mssql+pyodbc://server/database') 

或者使用SQL身份驗證:

engine = sa.create_engine('mssql+pyodbc://user:[email protected]/database') 

的SQLAlchemy具有的不同連接字符串選項here一個詳盡的解釋。

+2

謝謝。 SQL Server實例是唯一不在我正在工作的計算機上的實例,所以我不確定這裏是否有有趣的事情發生。只是爲了擴大一點你列出的刺激(因爲sql服務器實例明顯命名) - 'sa.create_engine('mssql + pyodbc:// [機器名] \\ [服務器名]/[數據庫]')' –

+1

不必命名。連接並使用配置爲「默認實例」的sql server實例更容易。當您將在一臺服務器上託管多個SQL Server實例時,需要命名實例。 – marr75

6

我有一個關於連接到MSSQL服務器而不使用DSN並使用Windows身份驗證的更新信息。在我的例子中,我有下一個選項: 我的本地服務器名稱是「(localdb)\ ProjectsV12」。我從數據庫屬性中看到的本地服務器名稱(我正在使用Windows 10/Visual Studio 2015)。 我的數據庫名稱是「MainTest1」

engine = create_engine('mssql+pyodbc://(localdb)\ProjectsV12/MainTest1?driver=SQL+Server+Native+Client+11.0', echo=True) 

它在連接到指定的驅動程序需要。 您可能會在找到你的客戶端版本:

control panel>Systems and Security>Administrative Tools.>ODBC Data Sources>System DSN tab>Add

看從該表中的SQL本機客戶端版本。

+0

這是唯一一個爲我工作的人。非常感謝! – Barka