【问题标题】:SqlAlchemy/Python properly catch psycopg2.errors.UndefinedTableSqlAlchemy/Python 正确捕获 psycopg2.errors.UndefinedTable
【发布时间】:2021-12-28 07:28:51
【问题描述】:

我有以下代码:

try: 
    Session = sessionmaker(bind=engine)
    session = Session()
           
    newentry = MyTable( 
             some_data = "some data",
    )
    session.add(newentry)
    session.commit()
     
except psycopg2.OperationalError as oe:
    print("Not possible to connect to DB")
except psycopg2.ProgrammingError as dbex:
    print("Table does not exist")
    Base.metadata.create_all(engine)
except Exception as ex:
    print(ex)
finally:    
    session.close()

如何正确捕捉psycopg2.errors.UndefinedTable

psycopg2.ProgrammingError 似乎不起作用,因为在第三次捕获时打印了异常,并且没有创建表。 我也尝试了psycopg2.Error,结果相同。

感谢您的帮助

【问题讨论】:

  • psycopg2.DatabaseError 怎么样?
  • 根据文档:“异常 psycopg2.ProgrammingError 因编程错误引发的异常,例如表未找到或已存在、SQL 语句中的语法错误、指定的参数数量错误等。它是DatabaseError 的子类”。但我会尝试使用 DatabaseError。谢谢
  • 其他人可能也有与您相同的问题,所以我想知道:您是否通过 sqlalchemy 构建了会话?该标记看起来像您所做的,但我无法从您的代码示例中看出。

标签: python-3.x sqlalchemy psycopg2


【解决方案1】:

试试这个,希望对你有帮助:

try: 
    Session = sessionmaker(bind=engine)
    session = Session()
       
    newentry = MyTable( 
             some_data = "some data",
    )
    session.add(newentry)
    session.commit()
 
except psycopg2.OperationalError as oe:
    print("Not possible to connect to DB")
except psycopg2.errors.UndefinedTable as ut:
    print("Table does not exist")

【讨论】:

    猜你喜欢
    • 2021-07-22
    • 1970-01-01
    • 2020-03-06
    • 2022-01-26
    • 2021-07-30
    • 1970-01-01
    • 2022-11-10
    • 2012-01-25
    • 2018-04-04
    相关资源
    最近更新 更多