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

在Heroku上运行连接Azure SQL的Python脚本遇SSL错误求助

解决Heroku上pyodbc连接Azure SQL的OpenSSL加载错误

错误提示说明Heroku容器中缺少ODBC驱动依赖的OpenSSL版本(1.0/1.1),或驱动未正确安装。以下是具体解决思路:

1. 配置正确的Buildpacks

确保添加支持系统依赖和Python的buildpack,顺序至关重要:

  • 先添加heroku-buildpack-apt用于安装系统级依赖
  • 再添加官方Python buildpack

执行命令:

heroku buildpacks:add --index 1 heroku-community/apt
heroku buildpacks:add --index 2 heroku/python

2. 通过Aptfile安装必要依赖

在项目根目录创建Aptfile文件,写入以下系统包:

unixodbc
unixodbc-dev
msodbcsql17
libssl1.1

若使用ODBC Driver 18,将msodbcsql17替换为msodbcsql18

3. 调整连接字符串参数

在连接字符串中补充SSL相关配置,强制规范加密连接:

conn_str = f'DRIVER={driver};SERVER={server};DATABASE={database};UID={user};PWD={password};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;'

也可尝试切换到ODBC Driver 18,修改driver变量:

driver = '{ODBC Driver 18 for SQL Server}'

4. 验证Heroku环境变量

确保Heroku上的数据库参数与本地一致,避免硬编码和拼写错误:

heroku config:set DB_SERVER=tcp:db.database.windows.net
heroku config:set DB_USER=myUser
heroku config:set DB_PASSWORD=myPw.
heroku config:set DB_NAME=myDB

代码中读取环境变量:

import os
server = os.environ.get('DB_SERVER')
user = os.environ.get('DB_USER')
password = os.environ.get('DB_PASSWORD')
database = os.environ.get('DB_NAME')

5. 替代方案:使用纯Python库

若ODBC依赖问题难以解决,可改用无需ODBC的pytds库:
安装依赖:

pip install pytds

修改连接代码:

import pytds
import os

server = os.environ.get('DB_SERVER').replace('tcp:', '')
user = os.environ.get('DB_USER')
password = os.environ.get('DB_PASSWORD')
database = os.environ.get('DB_NAME')

try:
    conn = pytds.connect(server, database, user, password, encrypt=True)
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM dbo.clientes")
    rows = cursor.fetchall()
    for row in rows:
        print(row)
    conn.close()
except Exception as e:
    print(f"Error en la conexión: {e}")

内容的提问来源于stack exchange,提问作者csolano29

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:37:40