我写了一个python脚本来循环遍历Microsoft SQL Server中的一些表。90%的时间,可以使用相同的查询,但其他10%(估计)我必须使用不同的查询,因为一些不同的头。
Spyder显示
DatabaseError: execute failed on sql
,然后说我的列名无效。我想使用try/except来完成这个,但是它说
NameError: 'DatabaseError' is not defined
我尝试使用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和query2在实际代码中不同,您可能希望将try块更改为:
try:
query_results = pd.read_sql_query(query1.format(query_table = table), conn)
except:
query_results = pd.read_sql_query(query2.format(query_table = table), conn)
正如你在问题中所写的,两个调用都使用query1,所以任何时候你在try部分得到一个异常,except部分通常会抛出一个与你刚刚捕获的相同的异常。