Python 尝试在 sql 服务器中删除或创建 table

Python try except to drop or create table in sql server

我正在使用 pyodbc 创建或删除 table。如果 table 已经存在,我写了一个函数来删除 table。请看下面我的语法

try:
    cur.execute('Drop table {}'.format(table_name))
except ProgrammingError:
    cur.execute(create_table)

但是,我收到错误消息:

<ipython-input-79-fe0fe29a1e8e> in upload_to_SQL(file_name, skiprows, table_name)
 26     try:
 27         cur.execute('Drop table {}'.format(table_name))
--->28  except ProgrammingError:
 29         cur.execute(create_table)
 30 

NameError: name 'ProgrammingError' is not defined

我确认 ProgrammingError 是我删除 sql 服务器中不存在的 table 时的错误消息。任何人都知道如何修改这个?

您得到的异常是 NameError,因为 ProgrammingError 未在当前范围内定义。 Exceptions 与 python 中的其他所有对象一样都是对象,您必须从正确的位置导入或引用它们。

你可能想做

try:
    cur.execute('Drop table {}'.format(table_name))
except pyodbc.ProgrammingError:
    cur.execute(create_table)

正如@Brendan Abel 所建议的,您的异常 ProgrammingError 超出了范围。做一个 import 像 :

from pyodbc import ProgrammingError

pyodbc.ProgrammingError。稍微更改一下您的查询也很好:

"DROP TABLE IF EXISTS {}".format(self.table_name)

这是来自 pyodbc 文档的列表 exceptions