これは、MySQLの一例となり、基本的な使用SQLAlchemyのを説明しています。これは、Pythonのバージョン2.7、SQLAlchemyのバージョン1.1.6。
I.はじめに
SQLAlchemyのは最も有名なPythonのORMツールです。
ORMについて:
フルネームオブジェクトリレーショナルマッピング(オブジェクト関係マッピング)。
それはつまり、操作Pythonのオブジェクトではなく、SQLクエリによって特徴づけられる、考慮すべきコードレベルは、Pythonは、プログラムより簡潔で読みやすくなり思考のプログラムで具現、代わりにSQLで、オブジェクトです。
特定の実装では、データベース操作の方法として、属性として前記データ列、Pythonのクラスデータベーステーブルを変換することです。
利点:
- 簡潔で読みやすい:テーブル抽象オブジェクトデータ(モデルデータ)を、より直感的な読み取りに
- ポータブル:パッケージデータベースエンジンの様々なデータベース面複数の、基本的に同じ操作、コードを維持することが容易
- より安全:回避のSQLインジェクション
なぜSQLAlchemyの?
パフォーマンスは、ネイティブSQLよりもわずかですが、本当に簡単データベースの操作が!
II。使用
概念とデータ型
コンセプト
コンセプト | 対応データベース | 説明 |
---|---|---|
エンジン | 接続 | ドライブエンジン |
セッション | 接続プーリング、トランザクション | 開始のお問い合わせ |
型 | テーブル | クラス定義 |
行 | 行 | |
質問 | 数行 | あなたは、複数の条件チェーンを追加することができます |
一般的なデータ型
データの種類 | データベースのデータ型 | Pythonのデータ型 | 説明 |
---|---|---|---|
整数 | int型 | int型 | プラスチック、32 |
弦 | VARCHAR | 弦 | 弦 |
テキスト | テキスト | 弦 | 長い文字列 |
浮く | 浮く | 浮く | フロート |
ブーリアン | TINYINT | BOOL | 真偽 |
日付 | 日付 | datetime.date | 蓄積時間日付 |
日付時刻 | 日付時刻 | datetime.datetimeの | ミニッツミリ秒アイソクロナスストレージ日 |
時間 | 時間 | datetime.datetimeの | 毎分を保存した場合 |
手順を使用します
データベーステーブルを作成します。
インストール1.
pip install SQLalchemy
接続を作成します。2.
from sqlalchemy import create_engine
engine = create_engine("mysql://user:password@hostname/dbname?charset=uft8")
これはコードの行は、エンジンを初期化作成し、エンジンは、特定の方言データベース接続タイプを識別するために、内部プール(接続プール)と方言(方言)を維持します。
エンジンは、しばらくは、プールや方言も作成された作成されますが、特定のステートメントの実行が.connect()というようになるまで、実際にデータベースに接続していない現時点では、データベースに接続します。
create_engineのような他のオプションのパラメータがあります:
engine = create_engine("mysql://user:password@hostname/dbname?charset=uft8",
echo=True,
pool_size=8,
pool_recycle=60*30
)
- エコー:利用できる真の変換へのセットは、ステートメントのSQLステートメントの印刷、一般的なデバッグをORMます
- POOL_SIZE:プールのサイズを、デフォルトでは0にセットがその接続無制限を示し、5です
- pool_recycle:制限時間を設定するデータベース接続が自動的に切断されていないどのくらいに
3.データベースのテーブルクラス(モデル)を作成します。
ORMの前で述べた重要な機能は、我々が動作するオブジェクトを通じて達成する必要が手術台は、のは、共通のユーザー・テーブルの例にクラスを作成してみましょうあります。
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Users(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String(64), unique=True)
email = Column(String(64))
def __init__(self, name, email):
self.name = name
self.email = email
declarative_base()は、ベースクラスは、ベースクラスおよびそのサブクラスで構成されているパッケージ、内部の方法sqlalchemyのであり、Pythonのクラスが一緒にマッピングし、データベーステーブルに関連付けられてもよいです。
__tablename__によるモデルベースのデータベーステーブルおよび関連テーブル、列は、列のデータテーブルを示しています。
4.データベースの生成
Base.metadata.create_all(engine)
そこに無視されている場合、上記のコードの実装は、あなたがDBにテーブルを作成するユーザーを検索し、テーブルを作成します。
営業データ
表は、運用データが共通のCRUD操作で作成された、私たちは一つ一つを導入しました。
セッション
SQLAlchemyのプログラムとデータベースの間のセッションのセッションを作成するために使用され、すべてのオブジェクトは、負荷により、セッションオブジェクトの保存が要求されます。
各セッションは、接続リソースエンジンを使用できることを保証するためにsessionmakerコールと関連したエンジンで工場を作成します。
from sqlalchemy.orm import sessionmaker
# 创建session
DbSession = sessionmaker(bind=engine)
session = DbSession()
操作セッションの一般的な方法は次のとおりです。
- フラッシュ:事前にコミット、データベースファイルにコミットは、まだデータベースファイルに書き込まれていません
- コミット:トランザクションをコミット
- ロールバック:ロールバック
- クローズ:クローズ
増加
簡単な例を与えるために:
add_user = Users("test", "[email protected]")
session.add(add_user)
session.commit()
session.add()データベースにコミットするまで、(あなたがsession.dirtyから見ることができます)現在のセッションで、著者の空間のモデル持続的な維持管理に参加します。
Q1:どのようにオブジェクトの戻り値の属性の直後に追加するには?
Db.session.flush)は(追加後に行うことができるので、あなたはセッションでのオブジェクトのプロパティを取得することができます。
Q2:どのように一括挿入、性能比較に?
一括挿入する方法はいくつかありますが、それらの大部分は、すなわち、比較しました。
session.add_all()<bulk_save_object()<bulk_insert_mappings()<SQLAlchemy_core()
検索
クエリは、最も一般的な操作であり、クエリの最も簡単な例を与えます:
users = session.query(Users).filter_by(id=1).all()
for item in users:
print(item.name)
我々は通常、我々クエリは、)(特定の.ALLを実行する場合にのみ、この時点では、特定のデータベースクエリに行きませんでした、Queryオブジェクトを返しますsession.queryことによって()、ことに注意することは、上記のクエリモードを介してデータを取得します。本当に最初のデータベースを操作するために行く()および他の関数れます。
前記クエリフィルタは、2つのフィルタリング方法を有するfilter_by、上記の例では、のように書くことができます。
users = session.query(Users).filter_by(Users.id == 1).all()
通常、これらの2つの方法で使用されるので、それらの間の違いを把握するようにしてください:
フィルタ | filter_by |
---|---|
サポートしているすべての比較演算子は、==等しい比較との比較します | のみ使用 "="、 "!=" そして "> <" |
フィルタリングクラス名属性名 | プロパティ名でフィルタ |
変装に達成するために、唯一の連続通話フィルタをクエリの組み合わせをサポートしていません。 | パラメータは、クエリの組み合わせによってサポートされ、** kwargsからです |
でのサポートおよび、またはので、 |
変更
更新データは、2つの方法があり、1つの方法は、更新クエリが使用することです:
session.query(Users).filter_by(id=1).update({'name': "Jack"})
もう一つのモデルは、操作に対応するテーブルです。
users = session.query(Users).filter_by(name="Jack").first()
users.name = "test"
session.add(users)
どちらの方法、それは一般的にバッチ更新で、その後、私は前者選ぶだろう、と彼らは、クエリオブジェクトのプロパティを取得して、あなたは後者を使用する必要があるシーンを更新する必要があります。
[削除]
そして、同様のデータ更新、削除データは、二つの方法が、最初にあります。
delete_users = session.query(Users).filter(Users.name == "test").first()
if delete_users:
session.delete(delete_users)
session.commit()
第二:
session.query(Users).filter(Users.name == "test").delete()
session.commit()
削除されたときに、第2のバッチが推奨されます。
上記は、PythonのSQLAlchemyのの基本的な使い方です。
:コードはを参照することが私のGitHubの