使用 Pyodbc 和 SQLAlchemy 连接到 SQL 服务器

Connecting to SQL server using Pyodbc & SQLAlchemy

以下是我要完成的工作的一些背景资料: 我的工作创建了一个应用程序,该应用程序将我们从事的每项工作的信息存储在 SQL 数据库中。我正在尝试使用 python 自动化我们的一些工作流程,但我想访问数据库中的信息。

据我了解,要完成此操作,我需要将数据库连接到 SQL 服务器。我正在尝试使用 SQLAlchemy 和 pyodbc 来做到这一点。作为应用程序的一部分,我有 Microsoft SQL Server 2008 R2 和 SQL Server Native Client 10.0 作为驱动程序。

问题是我无法使用 SQLAlchemy 或使用 create_engine() 或 connect() 方法的 pyodbc 连接到 SQL 服务器。我尝试了以下几种不同的方法:

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 用户名和密码来代替 "user" 和 "password"。 Here 是 SQL 配置的图片。管理器显示现有 SQL 服务器和我登录的用户。

我尝试将服务器设置为 .\DT_SQLEXPR2008 以及 'computername'\DT_SQLEXPR2008

每次我收到此错误消息时:

InterfaceError: (pyodbc.InterfaceError) ('28000', "[28000] [Microsoft][SQL Server Native Client 10.0][SQL Server]Login failed for user 'z003vrzk'. (18456) (SQLDriverConnect); [28000] [Microsoft][SQL Server Native Client 10.0][SQL Server]Login failed for user 'z003vrzk'. (18456)") (Background on this error at: http://sqlalche.me/e/rvf5)

谁能告诉我如何将数据库添加到 SQL 服务器并读取其中包含的信息?

这对 SQL 用户来说是多余的,但我还没有看到使用 python+pyodbc 回答这个问题。

首先,我需要连接到驻留在我计算机上 SQL 服务器实例上的主数据库:

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

DT_SQLEXPR2008 是 SQL 服务器实例名称,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(尚未使它工作)。