我开发了一个 Flask 应用程序,使用 SQLAlchemy 连接到 Snowflake DB 作为后端。如果网站闲置时间超过 4 小时,我会遇到 Snowflake 身份验证令牌过期问题。我在谷歌上查了一下并找到了答案
https://github.com/snowflakedb/gosnowflake/issues/160 https://github.com/snowflakedb/gosnowflake/issues/160
但它似乎对 Snowflake-SQLAlchemy 无效。
我使用 APScheduler 实现了一个心跳代码,该代码每 50 分钟触发一次“选择 1”,但如果会话在浏览器 (SSO) 中处于活动状态,则会抛出“身份验证令牌已过期”错误。
from sqlalchemy import create_engine
engine = create_engine('snowflake://<connection-string>' )
connection = engine.connect()
names = connection.execute_query("select names from employees")
def sensor():
""" Function for scheduling purposes. """
v = cursor.execute("""select 1""")
v = v.fetchall()
print(v)
sched = BackgroundScheduler(daemon=True)
sched.add_job(sensor,'interval',minutes=50)
sched.start()
我知道这个问题已经问了很多年了。这是我对 SO 的第一个回答 - 所以可能是一个练习的好地方:)
我怀疑这里有两个不同的事情在起作用 - 第一个是会话的保持活动,其他人已经回答了这个问题。
第二个(这似乎是你的问题)是你的 JWT 的生存时间——它与你的会话是分开的。
无论如何 - JWT 令牌的生命周期最长为一小时。因此,您需要实施令牌刷新策略。
JWT 的生存时间记录在此处(页面中间 - 在注释中)https://docs.snowflake.com/en/developer-guide/sql-api/authenticating.html https://docs.snowflake.com/en/developer-guide/sql-api/authenticating.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)