【发布时间】:2021-11-02 04:25:24
【问题描述】:
我编写了一个 python 脚本来循环访问 Microsoft SQL Server 中的一些表。 90% 的情况下,可以使用相同的查询,但另外 10%(估计)由于一些不同的标题,我必须使用不同的查询。
Spyder 正在显示一个
DatabaseError: sql 执行失败
接着说我的列名无效。我想使用 try/except 来解决这个问题,但它说
NameError: 'DatabaseError' 未定义
我尝试使用except Exception as e,但还是不行。
脚本看起来像这样
query1 = """
SELECT count(distinct column1) [Col1]
,SUM(CASE WHEN column2 <> '' THEN 1 ELSE 0 END)[Col2]
,SUM(CASE WHEN colum3 <> '' THEN 1 ELSE 0 END)[Col3]
FROM {query_table} with (nolock)
"""
query2 = """
SELECT count(distinct column_1) [Col1]
,SUM(CASE WHEN column_2 <> '' THEN 1 ELSE 0 END)[Col2]
,SUM(CASE WHEN column3 <> '' THEN 1 ELSE 0 END)[Col3]
FROM {query_table} with (nolock)
"""
for table in processed_df['Table Name']:
row_df = processed_df[processed_df['Table Name'] == table]
try:
query_results = pd.read_sql_query(query1.format(query_table = table), conn)
except DatabaseError:
query_results = pd.read_sql_query(query2.format(query_table = table), conn)
编辑
下面给出的答案是正确的,我想给 Erik 加分,尽管我有一些拼写错误,但他还是解决了这个问题。
也就是说,我想展示我发现的另一个选项,以防它可以帮助其他人。
try:
# Try thing 1
except pyodbc.Error:
# Try thing 2
except:
# If all else fails, do thing 3
我的代码中没有显示我使用的是 pyodbc 的事实。我收到的错误是DatabaseError,但说明没有帮助。
我切换到pyodbc.Error,这让我可以添加一个最终的except 语句以防万一。希望这对其他人有帮助!
【问题讨论】:
-
query1 最后缺少 FROM {query_table} 部分。
-
我会解决这个问题的。但在我的脚本中并非如此。谢谢你接听。
-
我还注意到,在您的 except: 部分中,您调用的命令与 try 中的命令完全相同,因此如果 try 抛出异常,则 except 很可能会抛出相同的命令。当您尝试 except Exception as e: 而不是 except DatabaseError: 时,是否改变了它的失败方式?
-
仍然收到
DatabaseError: Execution failed on sql '
标签: python sql-server error-handling try-catch