17

Python の「オブジェクト データベース」で SQL のようなクエリを実行できるライブラリを探しています。オブジェクト データベースとは、メモリ内の Python オブジェクトとリストのかなり複雑な構造を意味します。基本的に、これは「逆 ORM」です。リレーショナル データベースにオブジェクト指向インターフェイスを提供する代わりに、オブジェクト データベースに SQL 風のインターフェイスを提供します。

C# の LINQ は非常に近いです。Python のリスト内包表記は非常に優れていますが、複雑なこと (並べ替え、結合など) を行うと構文が複雑になります。また、リスト内包表記を使用してクエリを動的に作成することは (簡単に) できません。

実際の構文は、文字列ベースにするか、オブジェクト指向の DSL (from(mylist).select(...) など) を使用することができます。ライブラリが検索を高速化するために何らかのインデックスを提供する場合のボーナスポイント。

これは存在しますか、それとも発明する必要がありますか?

4

7 に答える 7

8

Deeは、メモリ内構造の SQL (作者はリレーショナル計算を好みます) を目指しています。GROUP BY に相当するものとすべてがあります。

于 2011-02-26T12:12:38.613 に答える
2

リスト内包表記が好きなら、それらの「怠惰な」対応物であるジェネレーター式を忘れないでください。これらは、クエリを動的に構築するという問題を少なくともある程度解決するはずです。これをitertoolsで補完し、もちろん iterables で機能するいくつかの組み込み関数を使用すると、Python の "LINQ to Object" (または少なくとも非常に近いもの) を持っていると言えます。

C# や LINQ のように Python に組み込まれた "pseudo-sql" 構文は得られませんが、それは好みの問題だと思います。(個人的には、Python のままで、SQL になろうとする代わりに同じキーワードなどを使用しているという事実が気に入ってifforます。wherefrom

オブジェクト指向の DSL アプローチは実行可能のようです (そして、文字列ベースよりも実装が簡単だと思います)。SqlAlchemy のような ORM でこの種のものを見つけることができますが、「通常の」データ構造に対して既にそれを行った人がいるかどうかはわかりません (人々はそれが必要だと本当に感じていないのでしょうか?)

インデックスなどについて: 実際の「オブジェクト データベース」を検索する必要があると思います...

于 2011-02-26T14:00:17.737 に答える
2

あなたが説明したものとはまったく異なりますが、littletableはメモリ内のオブジェクトのリストを操作し、結合、ピボット、クエリをサポートします。そして、各結果は別の小さなテーブルになるため、一連のフィルタリング手順を簡単に実行できます.

于 2011-02-26T15:44:45.433 に答える
2

SQL が行うことと慣用的な python で行うことができることの大きな違いの 1 つは、SQL では、探している情報を評価者に伝え、保持するデータの構造に基づいて最も効率的な検索方法を見つけ出すことです。 . Python では、インタープリターにデータの取得方法を伝えることしかできず、クエリ プランナーに相当するものはありません。

とはいえ、リスト内包表記以外にも、非常に役立つ追加のツールがいくつかあります。

まず、SQL の宣言的な性質によく似た構造を使用します。それらの多くはビルトインです。 mapfilterreducezipallany、および 、パッケージsortedの内容はすべて、データ クエリをかなり簡潔に表現する方法を提供します。operatorfunctoolsitertools

于 2011-02-26T15:35:36.227 に答える
1

同様のユースケースをサポートする優れたライブラリを探していたときに、これに出会いました。Pandasは、クエリの種類による結合/グループ化が必要な場合や、時系列処理の場合にうまく機能することがわかりました。

于 2015-11-24T21:55:26.650 に答える
1

sql4csvが役立つかどうかを確認してください。

于 2011-07-03T22:01:41.743 に答える