我使用pyodbc和pypyodbc python包连接到SQL服务器。
驱动程序使用其中任何一个[' SQL Server',' SQL Server Native Client 10.0'' ODBC驱动程序11用于SQL Server',&#39 ;用于SQL Server的ODBC驱动程序13']。
连接字符串:
connection = pyodbc.connect('DRIVER={SQL Server};'
'Server=aaa.database.windows.net;'
'DATABASE=DB_NAME;'
'UID=User_name;'
'PWD=password')
现在我收到错误消息,如" DatabaseError:(u' 28000',u" [28000] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]用户登录失败"
但我可以通过SQL Server管理工作室连接到服务器。
它在SQL Server身份验证上,而不是Windows身份验证。
这是关于python包和驱动程序问题还是数据库问题???怎么解决?
答案 0 :(得分:3)
您可以在密码后的连接字符串中添加Trusted_Connection=NO;
答案 1 :(得分:2)
我看到您的脚本中没有定义port
。
使用pyodbc ${DBName} ${DBUser} ${DBPass} ${DBHost} ${DBPort}
连接到服务器的一般方法,其中DBName
是您的数据库名称,DBUser
是用于连接服务器的用户名,DBPass
是密码DBHost
是数据库的URL,而DBPort
是用于连接数据库的端口。
我使用MS SQL,所以我的端口是1433
,您的端口可能有所不同。
我今天才遇到这个问题,并且已经解决了。
答案 2 :(得分:1)
我认为是由于连接字符串中的驱动程序定义而引起的问题。您可以在下面尝试。
connection = pyodbc.connect('DRIVER={SQL Server Native Client 10.0}; Server=aaa.database.windows.net; DATABASE=DB_NAME; UID=User_name; PWD=password')
答案 3 :(得分:1)
我应用了您的连接字符串,并使用服务器连接详细信息对其进行了更新,并且效果很好。 您确定您传递的用户名和密码正确吗? 登录失败表示连接成功建立,但身份验证未通过。
答案 4 :(得分:0)
问题不在于驱动程序问题,您可以看到错误消息是DatabaseError: Login failed for user
,这意味着如果用户尝试使用无法验证的凭据登录,则会出现此问题。我怀疑您使用Windows身份验证登录,如果是,请改为使用Trusted_Connection=yes
:
connection = pyodbc.connect('DRIVER={SQL Server};Server=aaa.database.windows.net;DATABASE=DB_NAME;Trusted_Connection=yes')
有关详细信息,请参阅my old answer,了解SQL Server Authentication modes
的差异。