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クエリスコープ
•個々のレコードためのカスタムクラス
•接続の復旧
•レプリカ遅延測定
•トランザクション

詳細はこちら: documentationGitHub repository.

タイトル:jardin, a dataframe-based ORM for Python

作者:Emmanuel Turlay

原文URL:https://tech.instacart.com/jardin-a-dataframe-based-orm-for-python-178e02e1c21

今すぐシェアしよう!
今すぐシェアしよう!