Python DatabaseError with SQL Server



我写了一个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部分通常会抛出一个与你刚刚捕获的相同的异常。

相关内容

  • 没有找到相关文章

最新更新