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