![](/img/trans.png)
[英]Converting between a SqlAlchemy url to a pyodbc connection string
[英]Setup pyodbc connection without password in the connection string
我正在尝试仅使用连接字符串中的 DSN 名称来设置 pyodbc 连接(主要目标是在连接字符串中不包含密码),如下所示:
import pyodbc
cxxn = pyodbc.connect("DSN=HARSHIT_CON")
这是我的.odbc.ini
文件:
[HARSHIT_CON]
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.9.1
Description=python
Database=my_db
Server=someserver,2500
user=harshitjindal
password=penguincontrolgroup
QuotedId=Yes
AnsiNPW=Yes
预期结果:因为用户名和密码是在.odbc.ini
文件中定义的,所以要设置连接,但出现以下错误:
Traceback (most recent call last):
File "hjind1/testdb.py", line 2, in <module>
cxxn = pyodbc.connect("DSN=HARSHIT_CON")
pyodbc.InterfaceError: ('28000', "[28000] [unixODBC][Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Login failed for user ''. (18456) (SQLDriverConnect)")
到目前为止我尝试了什么:
.odbc.ini
文件,我尝试删除.odbc.ini
文件,回溯显示未找到 DSN。 这使我相信正在读取 ini 文件。Login failed for user ''.
. 我以为没有检测到 user_id,所以我将以下行添加到 ini 文件中(希望UID
代替user
, PWD
代替password
可能会有所帮助):UID=harshitjindal
PWD=penguincontrolgroup
cxxn = pyodbc.connect("DSN=HARSHIT_CON;UID=harshitjindal")
。 这次错误消息显示用户是harshitjindal
但连接失败。 如果我还在连接字符串中传递密码,如cxxn = pyodbc.connect("DSN=HARSHIT_CON;UID=harshitjindal;PWD=penguincontrolgroup")
,那么它会起作用,但整个想法是从连接字符串中删除密码它已经在 ini 文件中定义。如何在不明确传递密码的情况下设置我的连接(从 DSN 配置中读取)?
诀窍是要意识到.odbc.ini
文件需要像配置文件一样对待。 这并不直观,因为在调用pyodbc.connect()
时会隐式地从 ini 文件中读取其他参数,例如Driver
、 Server
、 Database
,但需要显式读取user
和password
(或UID
和PWD
)。
这可以按如下方式完成:
import pyodbc
from ConfigParser import ConfigParser
config = ConfigParser()
config.read("/Users/harshitjindal/.odbc.ini") # odbc file path
DSN = "HARSHIT_CON"
cxxn = pyodbc.connect("DSN={0};UID={1};PWD={2}".format(DSN, config.get(DSN, "user"), config.get(DSN, "password")))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.