在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
相关产品推荐
相关产品推荐

