Python SQL 服务器的数据库错误

Python DatabaseError with SQL Server

我编写了一个 python 脚本来遍历 Microsoft SQL 服务器中的一些表。 90% 的时间,可以使用相同的查询,但另外 10%(估计)我必须使用不同的查询,因为 headers.

Spyder 正在显示

DatabaseError: Execution 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)

编辑

下面给出的答案是正确的,尽管我有一些错别字,我想给解决它的埃里克加分。

也就是说,我想展示我找到的另一个选项,以防它能帮助到其他人。

    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 部分通常会抛出与您刚刚捕获的异常相同的异常。