我正在尝试使用Python通过Window身份验证连接到SQL数据库。我查看了一些帖子(例如here),但建议的方法似乎不起作用。
例如,我使用了以下代码:
cnxn = pyodbc.connect(driver='{SQL Server Native Client 11.0}',
server='SERVERNAME',
database='DATABASENAME',
trusted_connection='yes')
但是我收到了以下错误:
Error: ('28000', "[28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]
Login failed for user 'DOMAIN\\username'. (18456) (SQLDriverConnect); [28000] [Microsoft]
[SQL Server Native Client 11.0][SQL Server]Login failed for user 'DOMAIN\\username'.
(18456)")
(请注意,我在上面的错误消息中分别用DOMAIN
和username
替换了实际的域名和用户名。)
我也尝试使用我的UID
和PWD
,这导致了同样的错误。
最后,我尝试按照上述链接中的建议更改服务帐户,但在我的计算机上,当我转到Log On
Properties
时,没有services.msc
标签}。
我想知道我做错了什么以及如何解决这个问题。
答案 0 :(得分:12)
从Windows计算机连接:
使用Microsoft的SQL Server ODBC驱动程序,Trusted_connection=yes
告诉驱动程序使用“Windows身份验证”,您的脚本将尝试使用运行脚本的用户的Windows凭据登录SQL Server 。 UID
和PWD
不能用于在连接字符串中提供备用Windows凭据,因此如果您需要以其他Windows用户身份进行连接,则需要使用RUNAS
来运行Python脚本和其他用户一样..
如果要对UID
和PWD
指定的特定 SQL Server登录使用“SQL Server身份验证”,请使用Trusted_connection=no
。
从非Windows机器连接:
如果您需要从非Windows计算机连接并且SQL Server配置为仅使用“Windows身份验证”,则Microsoft的SQL Server ODBC驱动程序将要求您使用Kerberos。或者,您可以使用FreeTDS ODBC,在连接字符串中指定UID
,PWD
和DOMAIN
,前提是SQL Server实例配置为支持较旧的NTLM身份验证协议。
答案 1 :(得分:1)
试试这个cxn字符串:
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;PORT=1433;DATABASE=testdb;UID=me;PWD=pass')
答案 2 :(得分:0)
我尝试了一切,这最终对我有用:
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> tree;
int n;
void update (int k, vector<int> vect)
{
k+=n;
tree[k]=vect;
for (k/=2;k>=1;k/=2)
{
tree[k]=merge(tree[2*k],tree[2*k+1]);
}
}
vector<int> merge (vector<int> arr1, vector<int> arr2)
{
int a1=arr1.size(), a2=arr2.size();
vector<int> sortvect(a1+a2);
int i=0,j=0,k=0;
while (i<a1&&i<a2) sortvect[k++]=((arr1[i]<arr2[j])?arr1[i++]:arr2[j++]);
while (i<a1) sortvect[k++]=arr1[i++];
while (j<a2) sortvect[k++]=arr2[j++];
return sortvect;
}
int main()
{
cin>>n; tree.resize(2*n,{0});
int a;
for (int i=0;i<n;i++)
{
cin>>a;
update(i,{a});
}
}
答案 3 :(得分:0)
连接到默认数据库(MSSQLSERVER)时遇到类似问题。如果要连接到默认数据库,请删除
数据库= 'DATABASENAME',
从连接参数部分开始,然后重试。
干杯, 迪帕克
答案 4 :(得分:0)
如果已使用命令提示符存储了凭据,则第一个选项有效。另一个选择是在连接中提供凭据(UId,Psw)。
以下对我有用:
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=yourServer;DATABASE=yourDatabase;UID=yourUsername;PWD=yourPassword')
答案 5 :(得分:0)
import pyodbc #For python3 MSSQL
cnxn = pyodbc.connect("Driver={SQL Server};" #For Connection
"Server=192.168.0.***;"
"PORT=1433;"
"Database=***********;"
"UID=****;"
"PWD=********;")
cursor = cnxn.cursor() #Cursor Establishment
cursor.execute('select site_id from tableName') #Execute Query
rs = cursor.fetchall()
print(rs)
答案 6 :(得分:0)
与OP稍有不同的用例,但对于感兴趣的用例,可以使用Windows身份验证连接到与登录用户帐户不同的用户帐户来使用MS SQL Server数据库。
这可以通过使用带有JDBC JTDS驱动程序的python jaydebeapi模块来实现。有关详细信息,请参见我的答案here。
答案 7 :(得分:-1)
Trusted_connection = no并没有帮助我。当我删除整行并添加UID,PWD参数时,它起作用了。我从中得到的收获是