【问题标题】:Python try except to drop or create table in sql serverPython尝试在sql server中删除或创建表
【发布时间】:2018-03-17 04:46:10
【问题描述】:

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

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 server 中不存在的表的错误消息。任何人都知道如何修改这个?

【问题讨论】:

    标签: python python-3.x try-except


    【解决方案1】:

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

    你可能想这样做

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

    【讨论】:

      【解决方案2】:

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

      from pyodbc import ProgrammingError
      

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

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

      这是来自pyodbc 文档的exceptions 列表。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多