簡體   English   中英

使用Pyodbc和SQLAlchemy連接到SQL Server

[英]Connecting to SQL server using Pyodbc & SQLAlchemy

這是我要完成的工作的一些背景知識:我的工作創建了一個應用程序,該應用程序將我們從事的每項工作的信息存儲在SQL數據庫中。 我正在嘗試使用python自動化某些工作流程,但是我希望能夠訪問數據庫中的信息。

據我了解,要實現此目的,我需要將數據庫連接到SQL Server。 我正在嘗試使用SQLAlchemy和pyodbc做到這一點。 作為應用程序的一部分,我將Microsoft SQL Server 2008 R2和SQL Server Native Client 10.0作為驅動程序。

問題是我無法使用create_engine()或connect()方法使用SQLAlchemy或pyodbc連接到SQL Server。 我在下面嘗試了幾種不同的方法:

1)使用DSN:我無法創建系統或用戶DSN,因為我會收到此錯誤消息Error

2)使用SQLAlchemy和主機名連接:

engine = sqlalchemy.create_engine("mssql+pyodbc://user:password@.\DT_SQLEXPR2008/C:\SQLTest\JobDB.mdf?driver=SQL+Server+Native+Client+10.0")
engine.connect()

3)使用SQLAlchemy和Windows身份驗證:

engine = sqlalchemy.create_engine('mssql+pyodbc://DT_SQLEXPR2008/C:\SQLTest\JobDB.mdf?driver=SQL+Server+Native+Client+10.0')
engine.connect()

4)使用pyodbc connect()方法:

conn = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=.\DT_SQLEXPR2008;DATABASE=C:\SQLTest\JobDB.mdf;UID=user;PWD=password')

在上面,我輸入了Windows用戶名和密碼來代替“用戶”和“密碼”。 是SQL配置的圖片。 經理,顯示現有的SQL Server和我登錄時使用的用戶。

我嘗試將服務器設置為。\\ DT_SQLEXPR2008以及'計算機名'\\ DT_SQLEXPR2008

每次我收到此錯誤消息:

InterfaceError:(pyodbc.InterfaceError)('28000',“ [28000] [Microsoft] [SQL Server Native Client 10.0] [SQL Server]用戶'z003vrzk'的登錄失敗。(18456)(SQLDriverConnect); [28000] [Microsoft ] [SQL Server本機客戶端10.0] [SQL Server]用戶'z003vrzk'的登錄失敗。(18456)“)(有關此錯誤的背景, 網址為: http ://sqlalche.me/e/rvf5)

誰能告訴我如何將數據庫添加到SQL Server並讀取其中包含的信息?

對於SQL用戶而言,這將是多余的,但是我還沒有看到使用python + pyodbc回答了這個問題。

首先,我需要連接到計算機上SQL Server實例上的master數據庫:

connMaster = pyodbc.connect('DRIVER={SQL Server Native Client 10.0}; 
SERVER=.\DT_SQLEXPR2008;DATABASE=master;Trusted_Connection=yes;')
cursorMaster = connMaster.cursor()

DT_SQLEXPR2008是SQL Server實例名稱,master是數據庫名稱,我正在使用Windows身份驗證進行連接。

接下來,我需要附加路徑中的數據庫:C:\\ Path \\ To \\ SQL \\ JobDB.mdf:

    sql1 = "CREATE DATABASE PBJobDB"
    sql2 = "ON (Filename = '{pathMDF}'), (Filename = '{pathLDF}')".format(pathMDF = pathMDF, pathLDF = pathLDF)
    sql3 = "FOR Attach"
    sql = sql1 + " " + sql2 + " " + sql3
    print(sql)
    connMaster.autocommit = True
    cursorMaster.execute(sql)
    connMaster.autocommit = False

PathMDF和PathLDF是主數據文件和日志文件的文件路徑名。

如果要連接到網絡位置的數據庫,我們將需要TRACEON 1807(尚未運行)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM