使用Pyodbc和SQLAlchemy连接到SQL Server

时间:2018-12-13 01:51:19

标签: python sql sql-server pyodbc mdf

以下是我要完成的工作的背景: 我的工作创建了一个应用程序,该应用程序将我们处理的每个作业的信息存储在SQL数据库中。我正在尝试使用python自动化某些工作流程,但是我希望能够访问数据库中的信息。

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

问题是我无法使用SQLAlchemy或pyodbc通过create_engine()或connect()方法连接到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用户名和密码来代替“用户”和“密码”。 Here是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 Native Client 10.0] [SQL Server]用户'z003vrzk'的登录失败。(18456)“)(此错误的背景位于:http://sqlalche.me/e/rvf5

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

1 个答案:

答案 0 :(得分:0)

这对于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(尚未工作)。