私はSQLAlchemy + Pyramidを使用してデータベースを操作しています。ただし、DB内に常に存在するとは限らないオプションのテーブルがあります。だから、それらを照会しながら、私はNoSuchTableError
存在しないオプションテーブルのチェック
try:
x = session.query(ABC.name.label('sig_name'),func.count('*').label('count_')).join(DEF).join(MNO).filter(MNO.relevance >= relevance_threshold).group_by(DEF.signature).order_by(desc('count_')).all()[:val]
except NoSuchTableError:
x = [-1,]
でこのようなケースをキャッチしようとする。しかし、この文を実行する上で、私はなぜSQLAlchemyのがより一般的なProgrammingErrorを上げない代わりに、より具体的なProgrammingError
ProgrammingError: (ProgrammingError) (1146, "Table 'db.mno' doesn't exist")
を取得NoSuchTableError?これが実際に予想される動作である場合、テーブルが存在するかどうかに応じてアプリが正しい情報を表示するようにするにはどうすればよいですか?
EDIT1
これは私のWebアプリケーションの一部であるので、DBのモデルは、(私のピラミッドのWebアプリケーションの下)models.py
です。 .iniファイルに、ユーザーが追加のテーブルを使用できるかどうかを選択する設定があります。しかし、ユーザーを信頼していないので、テーブルが存在するかどうかを自分で確認することができます。論争の表は、テーブルが存在しているかどうか私に語っ
class MNO(Base):
__tablename__="mno"
id=Column(Integer,primary_key=True,autoincrement=True)
sid=Column(Integer)
cid=Column(mysql.MSInteger(unsigned=True))
affectability=Column(Integer)
cvss_base=Column(Float)
relevance=Column(Float)
__table_args__=(ForeignKeyConstraint(['sid','cid',],['def.sid','def.cid',]),UniqueConstraint('sid','cid'),)
どのようにして(好ましくはアプリのセットアップ中)(models.py
中)のようなものでしょうか?
注:この場合、私があれば試してみなければなりません...他に「SQLAlchemyの[ある]はロードするように求められたときにNoSuchTableError
のみがスローされ、sqlalchemyドキュメントによると
は、あなたの新しい質問に対処しようとする私の答えに別の部分を追加しました。 –