jardin (noun, french, /ʒaʁ.dɛ̃/) — garden, yard, grove.
jardin(名詞、フランス語、/ʒaʁ.dɛ/) – 庭、庭、森林。
言語の選択でPythonを使用するデータサイエンティストは、Pandas dataframesの使用を好みます。 このデータ構造は、メモリ内の行のコレクションを格納し、Cythonで調整されたアルゴリズムにより、高速な操作(フィルタリング、結合、クエリ、集約、変換など)を可能にします。
PandasにSQLクエリを文字列として与え、データフレームを返すことができます:
import psycopg2 as pg import pandas.io.sql as psql conn = pg.connect(...) query = "SELECT * FROM users LIMIT 10;" df = psql.read_sql(query=query, conn=conn)
それがすべてうまくといいですが、ここではアブストラクション(抽象化)レイヤーが欠けています。 文字列としてクエリを書くことは、大規模なコードベースでは扱いにくくなる可能性があります。 コードは簡単に再利用できません。パラメータはパラメトリックではなく、データベース接続はコールスタックの上下に移動する必要があります。
jardinはこれを解決することを目指しています。 jardinを使用すると、上記のスニペットは次のようになります。
# models.py import jardin.Model class Users(jardin.Model): pass
# app.py from models import Users df = Users.select(limit=10)
Jardin.Modelクラスを継承するだけで、モデルが一元的に定義されると、関連する表(table)を簡単に照会することができます。
jardinで表(table)をクエリする方法は次のとおりです。
# Query a single row user = Users.find(123) # Record(id=123, name='Gaston Lagaffe') user = User.find_by(values={'name': 'Gaston Lagaffe'}) # Record(id=123, name='Gaston Lagaffe')
# Easy conditions users = Users.select(where={'company_id': 10})
# Most recent records users = Users.last(5)
# Full parametrization users = Users.select(select=['email'], where={'company_id': [2, 5, 10]}, inner_join=[Companies], order='id DESC', limit=10)
クエリを構築するには他にも楽しい方法がたくさんあります。documentationを徹底的に調べてください。
他の種類のクエリも実行できます。ここにサンプルがあります。
# INSERT query user = Users.insert(values={ 'email': 'new@row.db', 'name': 'Rob Loblaw'})
# UPDATE query Users.update(values={'name': 'Robert Loblaw'}, where={'id': 7})
# DELETE query Users.delete(where={'company_id': 34})
# Raw query Users.query(sql='SELECT * FROM users LIMIT 10;')
# Query from SQL file Users.query(filename='path/to/file.sql')
# Transaction with Users.transaction(): Users.insert(...) OtherModels.update(...)
このAPIは、より洗練されたポータブル(移植可能)なコードを作成します。
jardinではさらに多くの機能が利用できます。
•マスタ/レプリカデータベース分割のサポート
•複数のデータベースのサポート
•多くの関連付けと所属する関連付け
•ウォーターマークの問い合わせ
• à la ActiveRecordクエリスコープ
•個々のレコードためのカスタムクラス
•接続の復旧
•レプリカ遅延測定
•トランザクション
詳細はこちら: documentation と GitHub repository.
タイトル:jardin, a dataframe-based ORM for Python
作者:Emmanuel Turlay
原文URL:https://tech.instacart.com/jardin-a-dataframe-based-orm-for-python-178e02e1c21