以下是我要完成的工作的背景: 我的工作创建了一个应用程序,该应用程序将我们处理的每个作业的信息存储在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并读取其中包含的信息?
答案 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(尚未工作)。