繁体   English   中英

通过dsn错误进行ODBC连接

[英]ODBC connection through dsn error

我尝试通过pyodbc.connect调用我的uid和密码时遇到问题

这是我的odbc.ini:

[my_dsn]
Driver= SQL Server
Server=my_server
User=uid_reader
Password=password_reader
MultiSubnetFailover=Yes
Database=master

当我进行硬编码时,它可以完美地工作并且可以连接

test_uid = 'uid_reader'
test_password = 'password_reader'

conn = pyodbc.connect(r'DSN=my_dsn;UID={a};PWD={b}'.format(a=test_uid,b=test_password))

当我从odbc.ini调用dsn变量时,它不起作用

conn = pyodbc.connect(r'DSN=my_dsn;UID=User;PWD=Password')

错误:(“ 28000”,“ [28000] [unixODBC] [Microsoft] [用于SQL Server的ODBC驱动程序11] [SQL Server]用户“用户”的登录失败。(18456)(SQLDriverConnect)”)

我想将密码隐藏在odbc.ini中,这样当我调用pyodbc.connect时它不会出现

conn = pyodbc.connect(r'DSN=my_dsn;UID=User;PWD=Password')似乎正在使用字符串my_dsnUserPassword 您可以尝试使用此处的文档之类的关键字,也可以像对硬编码解决方案那样使用类似的字符串格式,但是将其替换为已加载的配置数据。

文档看来,您应该应该可以直接从ini加载DSN信息,但是我自己也没有取得太大的成功。 需要说明的是该文件只说你所能使用的登录凭据,所以也许它取决于驱动程序?

无论哪种方式,下面都是使用configparser的版本,该版本应该可以工作。 对于某些人来说,它可能被认为是骇客。

import pyodbc
from configparser import ConfigParser

config = ConfigParser()
config.read(configfile)   # your odbc.ini file path and name
dsn = config['my_dsn']

#If you want to use Keywords:

conn = connect(driver=dsn['driver'], server=dsn['server'], database=dsn['database'], uid=dsn['user'], pwd=dsn['password'])

#If you want to use string formatting with list comprehension instead:
conn = pyodbc.connect(''.join(['{0}={1}; '.format(k, l) for k, l in d.items()])

我遇到过同样的问题。

https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Windows#using-a-dsn

您可以使用Trusted_Connection属性使用受信任的连接(即使用Windows帐户而不是登录名和密码)连接到SQL Server实例。

conn = pyodbc.connect('DSN=mynewdsn;Trusted_Connection=yes;')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM