![](/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.