You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的pyodbc连接SQL Server时添加密码实现自动连接

SQL Server自动连接:添加密码及明文密码替代方案

一、修复密码添加失败的问题

你的代码报错是因为字符串拼接语法错误,存在两个核心问题:

  1. AUTHENTICATION参数后缺少拼接用的+号,导致字符串无法连续拼接
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:09:25