如何在 SQLAlchemy 中获取孤立的 SQL 语法错误

sea*_*han 1 python sql sqlalchemy exception

我想使用 SQLAlchemy 隔离任何 SQL 语法错误。例如..

try:
  [row for row in db.execute(text("select * from userds"), **args)]
except ProgrammingError as error:
  print(error)
Run Code Online (Sandbox Code Playgroud)

我明白了

(psycopg2.ProgrammingError) relation "userds" does not exist
LINE 1: select * from userds
                      ^
 [SQL: 'select * from userds'] (Background on this error at: http://sqlalche.me/e/f405)
Run Code Online (Sandbox Code Playgroud)

而且我只对..感兴趣

relation "userds" does not exist
Run Code Online (Sandbox Code Playgroud)

有人知道这是否可能吗?

sea*_*han 5

我已经找到了我的问题的解决方案。您必须捕获 StatementError 并打印出orig错误对象的属性,如下所示。

from sqlalchemy.exc import StatementError

try: 
 [r for r in db.execute("invalid statement")]
except StatementError as error:
 print(error.orig)
Run Code Online (Sandbox Code Playgroud)

https://github.com/zzzeek/sqlalchemy/blob/699272e4dcb9aa71ebbc0d9487fb6de82d3abc2b/lib/sqlalchemy/exc.py#L280