如何在Python的pyodbc连接SQL Server时添加密码实现自动连接
SQL Server自动连接:添加密码及明文密码替代方案
一、修复密码添加失败的问题
你的代码报错是因为字符串拼接语法错误,存在两个核心问题:
AUTHENTICATION参数后缺少拼接用的+号,导致字符串无法连续拼接PWD部分的引号嵌套错误,且密码前多了不必要的空格
修正后的代码
server = 'myserver' database = 'mydatabase' username = 'johndoe@xyz.com' authentication = 'ADI' driver = '{ODBC Driver 17 for SQL Server}' password = 'MyPassword' conn = pyodbc.connect( 'DRIVER=' + driver + ';SERVER=' + server + ';PORT=1433;DATABASE=' + database + ';UID=' + username + ';AUTHENTICATION=' + authentication + ';PWD=' + password )
更简洁的f-string写法(Python 3.6+)
用格式化字符串避免拼接错误:
conn_str = f""" DRIVER={driver}; SERVER={server}; PORT=1433; DATABASE={database}; UID={username}; AUTHENTICATION={authentication}; PWD={password} """ conn = pyodbc.connect(conn_str)
二、避免明文写入密码的方案
1. 读取环境变量
在系统/项目环境变量中存储密码,代码中动态读取:
import os password = os.getenv('SQL_SERVER_PASSWORD') # 后续用上述方式拼接连接字符串即可
- Windows:临时设置用命令行
set SQL_SERVER_PASSWORD=MyPassword,永久设置需在系统属性中添加环境变量 - Linux/macOS:临时设置用终端
export SQL_SERVER_PASSWORD=MyPassword,永久设置可写入~/.bashrc或~/.zshrc
2. 使用配置文件
创建config.ini(注意不要提交到版本控制系统):
[SQLServer] server = myserver database = mydatabase username = johndoe@xyz.com authentication = ADI password = MyPassword
代码中读取配置:
import configparser config = configparser.ConfigParser() config.read('config.ini') server = config['SQLServer']['server'] database = config['SQLServer']['database'] username = config['SQLServer']['username'] authentication = config['SQLServer']['authentication'] password = config['SQLServer']['password'] conn_str = f"DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={username};AUTHENTICATION={authentication};PWD={password}" conn = pyodbc.connect(conn_str)
记得在.gitignore中添加config.ini,防止密码泄露。
3. 系统密钥管理工具(生产环境推荐)
使用各平台自带的密钥管理工具,避免密码暴露:
- Windows:通过
win32cred库读取Credential Manager中的凭证 - Linux/macOS:使用
keyring库对接系统密钥链
示例(keyring库):
先安装依赖:pip install keyring
import keyring # 仅需执行一次:将密码存入系统密钥链 keyring.set_password("SQLServer", "johndoe@xyz.com", "MyPassword") # 读取密码 password = keyring.get_password("SQLServer", "johndoe@xyz.com") # 连接数据库 conn_str = f"DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={username};AUTHENTICATION={authentication};PWD={password}" conn = pyodbc.connect(conn_str)
内容的提问来源于stack exchange,提问作者user17582908
相关产品推荐
相关产品推荐

