python - 在python中连接失败后重试SQL连接的正确语法?
问题描述
我有一个在 Azure 应用服务上运行的破折号(烧瓶)应用程序,我要求用户输入,然后他们单击“提交”,我的代码运行 SQL 查询。它几乎一直有效,但有时查询无法连接(通信链路故障)。当我重新启动应用服务时,它再次开始工作。
有没有办法利用 Try & except 子句尝试重新建立 SQL 连接或其他什么?如果我想尝试实现这种逻辑,我的代码会是什么样子?我正在努力找出为其编写语法的正确方法。
@dash_app.callback(
Output('hidden-dataframe', 'children'),
[Input('submit-button', 'n_clicks')],
[State('company-dropdown', 'value')])
def select_company(n_clicks, value):
if value is None:
raise PreventUpdate
else:
x = value
if n_clicks:
from datetime import datetime, timedelta
start_date = (datetime.today() - timedelta(29)).strftime('%Y-%m-%d')
end_date = datetime.today().strftime('%Y-%m-%d')
cnxn = pyodbc.connect(driver='{OBDC Driver 17 for SQL Server}',host,database,trusted_connection,user,password)
query = f"SELECT data FROM table WHERE ..."
df = pd.read_sql_query(query, cnxn)
return df.to_json(date_format='iso', orient='split')
这是连接失败时得到的错误代码:
解决方案
要在重新连接时重试一次,请替换
df = pd.read_sql_query(query, cnxn)
和
try:
df = pd.read_sql_query(query, cnxn)
except pyodbc.OperationalError:
cnxn.close()
cnxn = pyodbc.connect(driver='{OBDC Driver 17 for SQL Server}',host,database,trusted_connection,user,password)
df = pd.read_sql_query(query, cnxn)
这在 azure app service/flask 中对我有用。但是直接使用光标,而不是 pandas,因此您要处理的特定错误可能会有所不同。
推荐阅读
- android - 如何使用 Room 和 Java 来管理外键
- javascript - 如何循环嵌套的json?
- azure - 如何在 Cosmos DB 中执行“分组依据”查询?
- python - 是否可以使用我的机器人在 discord.py 中附加大于 150Mb 的文件
- python - 在 Django 管理员删除表单中隐藏对象列表
- javascript - 未捕获的类型错误:尽管能够在屏幕上看到数据,但无法读取未定义的属性“innerHTML”
- javascript - “Promise.resolve”与“new Promise”构造函数中的不同错误处理
- python - 从 .csv 读取前 n 行并将列存储到列表中
- python - 有人能告诉我为什么说我有“无效的语法”吗?
- indexing - 索引匹配不返回正确的值