在Django中通过Fixie代理连接Snowflake失败求助
解决Heroku Django应用通过Fixie代理连接Snowflake的IP白名单问题
问题根源
Snowflake Python连接器不支持直接传入完整的代理URL字符串,你之前的代码使用proxy参数传递完整URL的方式不符合连接器的参数要求,导致代理设置被忽略。
修正后的代码
1. SQLAlchemy 连接方式
拆分Fixie代理的地址、端口、用户名和密码,作为单独参数传入connect_args:
from sqlalchemy import create_engine # 拆分Fixie代理信息 proxy_host = 'velodroll.usefixie.com' proxy_port = 80 proxy_user = 'fixie' proxy_password = 'kT8kuyNpPbrbdx' engine = create_engine( 'snowflake://{user}:{password}@{account}/{database}/{schema}'.format( user=connection_details["user"], password=connection_details["pw"], account=connection_details["account"], database=connection_details["database"], schema=connection_details["schema"], ), connect_args={ 'proxy_host': proxy_host, 'proxy_port': proxy_port, 'proxy_user': proxy_user, 'proxy_password': proxy_password } )
2. 直接使用snowflake.connector连接
直接传递代理相关的顶层参数,无需嵌套在connect_args中:
import snowflake.connector # 拆分Fixie代理信息 proxy_host = 'velodsad.usefixie.com' proxy_port = 80 proxy_user = 'fixie' proxy_password = 'kT8djczxc14' conn = snowflake.connector.connect( user=connection_details["user"], password=connection_details["pw"], account=connection_details["account"], database=connection_details["database"], schema=connection_details["schema"], proxy_host=proxy_host, proxy_port=proxy_port, proxy_user=proxy_user, proxy_password=proxy_password )
额外注意事项
- 确认Fixie提供的固定出口IP已经添加到Snowflake账户的IP白名单中,这是代理生效的前提。
- 避免硬编码代理密码等敏感信息,建议通过Heroku环境变量管理这些参数,比如
os.environ.get('FIXIE_PROXY_PASSWORD')。 - 测试连接前可以先通过Fixie的工具验证代理是否正常工作,确保请求确实通过Fixie的IP发出。
内容的提问来源于stack exchange,提问作者Ahmed Sanai
相关产品推荐
相关产品推荐

