1. TOP
  2. プログラム
  3. ソフト
  4. python
  5. SQLAlchemy

SQLAlchemy

MySQL

非常に人気のあるオープンソースのリレーションデータベース。SQLite
と異なり、MySQLは本物のサーバーなので、クライアントはネットワーク
越しにほかのデバイスからサーバーにアクセスすることができます。
MySQLドライバとしては、MysqlDBがもっとも人気がある
PythonからMySQLにアクセスするために使えるドライバ
MySQLConnector
PYMySQL
oursql

 

PostgreSQL

様々な点でMySQLよりも高度な本格的なオープンソースのリレーヨナル
データベース
PostgreSQLへのアクセスできるPythonドライバ
psycopg2
py-PostgreSQL

SQLAlchemy

DB=APIが面倒を見てくれつのは共通APIというレベルまで、個々の
データーベースは、それぞれの機能や哲学を反映した方言を実装
している。何らかの方法でこれらの違いを埋め用とするライブラリ
は多数ある。そのようなクロスデータベースPytonライブラリの中
でももっとも多くの指示を集めているのがSQLAlehemyです。
SQLAlchemyは標準ライブラリではないが、多くの人が使っている。
次のコマンドでシステムにSQLAlchemyをインストールできる。
pip install sqlalchemy
SQLAlchemyは、複数のレベルで使える
●もっとも低いレベルでは、データベース接続のプール、SQLコマンド
の実行、結果のリターンを処理する。ここはDB-APIにもっとも近い
●次のレベルは、SQLの文をPythonの式として表現する、SQL表現言語
である。
●もっとも高いレベルは、ORMレイヤだ。このレイヤはSQL表現言語
を使ってアプリケーションコードとリレーショナルデータ構造を
結びつける。
SQLAlchemyは、前節で説明したデータベースドライバを操作する。
ドライバをインポートする必要はない。SQLAlchemyに渡す接続文字
列によって、どのドライバが必要がわかる。
接続文字列の形式
dialect + driver://user:password@host:port/dbname
dialect データベースのタイプ
driver そのデータベースに対して使いたいと思っているドライバ
userとpassword データベース認識文字列
hostとport データベースの位置(:portは、デフォルトのポートなら
不要)
dbname 最初に接続するサーバ上のデータベース
sqlite ---- pysqlite
mysql ---- mysqlconnector
mysql ---- pymysql
mysql ---- oursql
postgresgl ---- psycopg2
postgresql ---- pypostgresql

エンジンレイヤ

SQLAlchemyのもっとも低いレベルを試してみよう。これはすでに、土台に
なっているDB-API関数とほとんど変わらない。
Pythonですでに組み込まれているSQLiteで試してみよう。SQLliteのための
接続文字列では、host, port, user, psaawordは不要だ。dbnameは、
データベースをどのファイルに格納するかをSQLiteに知らせる。dbnameを
省略すると、SQLiteはメモリー内にデータベースを構築する。dnameの先頭
がスラッシュ('/')なら、ファイル名絶対パス指定される。そうでなければ
カレントディレクトリからの相対パスと解釈される。
まず必要なものをインポートしなければならない。
インポートエイリアスの例、こうするとasという文字列でSQLAlchemyの
メソッドを参照できる。
import sqlalchemy as sa
データベースを作り、メモ内にその記憶領域(ストレージ)を作る
conn = sa.create_engine('sqlite://')
3つの列を持つZooというテーブルを作る
conn.execute('''CREATE TABLE zoo
(critter VARCHAR(20) PRIMARY KEY,
count INT,
damage FLOAT)''')

conn.execute()を実行すると、ResultProxyというSQLAlchemyオブジェクト
が返される。
ins = 'INSRT INTO zoo (critter, count, damage) VALUES
(?, ?, ?)'
conn.execute(ins, 'duck', 10, 0.0)
conn.execute(ins, 'bear', 2, 1000.0)
conn.execute(ins, 'weasel', 1, 2000.0)
次に、今書き込んだすべての情報を表示するようデータベースに要求する
rows = conn.execute('SELECT * FROM zoo')

for row in rows
print(rows)
利点は最初にデータベースドライバをインストールする必要がないこと。