9

私たちは、WSGIでPythonを使用するWebアプリケーションに対してSQLクエリフロントエンドをSQLAlchemy(ORMではなくコア)で有効にしてPostgreSQLデータベースをクエリしようとしています。クエリの構築を支援するためにいくつかのデータレイヤー関数が設定されており、現在、このタイプのクエリを可能にする何かを設定しようとしています。

select id from <table_name> where ... limit ...

フロントエンドには、ユーザーがwhere句とlimit句を入力できるテキストボックスがあり、フロントエンドからデータを柔軟かつ動的にクエリできます。つまり、アドホッククエリを有効にします。ですから、私たちが今直接目にしているのは、次のことだけです。

select id from <table_name>

そして、ユーザーは次のように入力します。

where date > <some_date>
where location is not null limit 10 order by location desc

同じバックエンド関数を使用します。select、column、tableはデータレイヤーによって管理される必要があります(つまり、それらが何であるかを知っているので、ユーザーはそれを知る必要はありません)。whereただし、SQLAlchemyで句と句の両方を自動的に解析する方法を私は知りませんlimit。現在あるのは、テーブル名とid列の名前を返し、それを使用してテキストクエリを作成し、それをtext()呼び出しへの入力としてSQLAlchemyに渡すことができる関数です。

SQLAlchemyまたは他のライブラリでこれを行う方法はありますか?または、フロントエンドからこの機能を許可しながらSQLを解析することを含まない、私が知っておくべきより良いパターンはありますか?

どうもありがとう!すべての提案は大歓迎です。

4

1 に答える 1

7

フォローするかどうかはわかりませんが、SQL-Alchemyの一般的な使用法は次のようになります。

 results = db.session.query(User).filter(User.name == "Bob").order_by(User.age.desc()).limit(10)

これにより、Userテーブルがクエリされ、「Bob」という名前の最も古い上位10人のメンバーが返されます。

于 2013-01-22T01:52:27.203 に答える