GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

kennethreitz

records – Humans™用SQL

投稿日:

レコード:SQL for Humans™

レコードは、ほとんどのリレーショナルデータベースに対して生のSQLクエリを作成するための非常にシンプルですが強力なライブラリです。

SQLを書くだけです。 鐘も、笛もない。 この共通の作業は、標準的なツールを使用することで驚くほど困難な場合があります。 このライブラリは、このワークフローを可能な限りシンプルにするとともに、クエリ結果を操作するための洗練されたインターフェイスを提供するよう努めています。

データベースのサポートには、RedShift、Postgres、MySQL、SQLite、Oracle、およびMS-SQL(ドライバは含まれません)が含まれます。

☤基本

私たちはSQLを書く方法を知っていますので、いくつか私たちのデータベースに送りましょう:

import records

db = records.Database('postgres://...')
rows = db.query('select * from active_users')    # or db.query_file('sqls/active-users.sql')

一度に1行を取得:

>>> rows[0]
<Record {"username": "model-t", "active": true, "name": "Henry Ford", "user_email": "model-t@gmail.com", "timezone": "2016-02-06 22:28:23.894202"}>

または、それらを反復する:

for r in rows:
    print(r.name, r.user_email)

値には、 row.user_emailrow['user_email'] 、またはrow[3]など、さまざまな方法でアクセスできます。

英数字以外の文字(スペースなど)のフィールドも完全にサポートされています。

または後で参照できるようにレコードコレクションのコピーを保管してください。

>>> rows.all()
[<Record {"username": ...}>, <Record {"username": ...}>, <Record {"username": ...}>, ...]

1つの結果しか期待していない場合:

>>> rows.first()
<Record {"username": ...}>

他のオプションには、 rows.as_dict()rows.as_dict(ordered=True)ます。

☤特長

  • 反復行は、後で参照できるようにキャッシュされます。
  • $DATABASE_URL環境変数のサポート。
  • 便利なDatabase.get_table_namesメソッド。
  • クエリをエクスポートするためのコマンドラインレコードツール。
  • 安全なパラメータ化: Database.query('life=:everything', everything=42)
  • クエリは文字列またはファイル名、パラメータとして渡すことができます。
  • トランザクション: t = Database.transaction(); t.commit() t = Database.transaction(); t.commit()
  • 一括処理: Database.bulk_query()Databse.bulk_query_file()

レコードは誇らしげにSQLAlchemyTablibによって強化されています。

☤データエクスポート機能

レコードにはTablibの完全な統合機能もあり、1行のコードでCSV、XLS、JSON、HTMLテーブル、YAML、またはPandas DataFramesに結果をエクスポートすることができます。 友人とのデータ共有やレポート作成に優れています。

>>> print(rows.dataset)
username|active|name      |user_email       |timezone
--------|------|----------|-----------------|--------------------------
model-t |True  |Henry Ford|model-t@gmail.com|2016-02-06 22:28:23.894202
...

カンマ区切り値(CSV)

>>> print(rows.export('csv'))
username,active,name,user_email,timezone
model-t,True,Henry Ford,model-t@gmail.com,2016-02-06 22:28:23.894202
...

YAMLはマークアップ言語(YAML)ではない

>>> print(rows.export('yaml'))
- {active: true, name: Henry Ford, timezone: '2016-02-06 22:28:23.894202', user_email: model-t@gmail.com, username: model-t}
...

JavaScript Object Notation(JSON)

>>> print(rows.export('json'))
[{"username": "model-t", "active": true, "name": "Henry Ford", "user_email": "model-t@gmail.com", "timezone": "2016-02-06 22:28:23.894202"}, ...]

Microsoft Excel(xls、xlsx)

with open('report.xls', 'wb') as f:
    f.write(rows.export('xls'))

パンダのデータフレーム

>>> rows.export('df')
    username  active       name        user_email                   timezone
0    model-t    True Henry Ford model-t@gmail.com 2016-02-06 22:28:23.894202

あなたはポイントを得る。 Tablibの他のすべての機能も利用できるので、結果を並べ替えたり、列/行を追加/削除したり、重複を削除したり、テーブルを転置したり、区切り記号を追加したり、列単位でデータをスライスしたりできます。

詳細については、 Tablibのドキュメントを参照してください。

☤インストール

もちろん、推奨されるインストール方法はpipenvです:

$ pipenv install records[pandas]
✨🍰✨

☤コマンドラインツール

追加のボーナスとして、 recordsコマンドラインツールが自動的に含まれます。 使用法情報のスクリーンショットです:

☤ありがとう

このライブラリをチェックしていただきありがとうございます! 私はそれが役に立つと思う。

もちろん、常に改善の余地があります。 レコードをより良く、より強く、より速くするために、問題を自由に開いてください







-kennethreitz
-, , , , , , ,

執筆者: