ホームページ >バックエンド開発 >Python チュートリアル >Python ORM フレームワーク SQLAlchemy 入門チュートリアル

Python ORM フレームワーク SQLAlchemy 入門チュートリアル

WBOY
WBOYオリジナル
2016-06-16 08:44:181028ブラウズ


SQLAlchemy の哲学は、SQL データベースの規模とパフォーマンスがオブジェクト コレクションよりも重要であり、オブジェクト コレクションの抽象化がテーブルや行よりも重要であるということです。

SQLAlchemy をインストールします

コードをコピーします コードは次のとおりです:
pip install sqlalchemy
インポート後にエラーが報告されなければ、インストールは成功です
コードをコピーします コードは次のとおりです:
>>> sqlalchemy をインポート
>>> sqlalchemy.__version__
'0.9.1'
>>>

2 sqlalchemy を使用してデータベースを操作します

1. メタ情報を定義し、エンジンにバインドします

コードをコピーします コードは次のとおりです:

(env)ghost@ghost-H61M-S2V-B3:~/project/flask/fsql$ python
Python 2.7.3 (デフォルト、 Apr 10 2013, 05 :13:16)
Linux2 上の [GCC 4.7.2]
詳細については、「ヘルプ」、「著作権」、「クレジット」、または「ライセンス」と入力してください。
>> ;> sqlalchemy からインポート *
>>> sqlalchemy.orm からインポート *
>>> 'sqlite:///./sqlalchemy.db', echo= True) # エンジンを定義
>>> メタデータ = MetaData(engine) # メタ情報をバインド
>

2. テーブルを作成し、データベースを初期化します

コードをコピー コードは次のとおりです。
>>> users_table = Table('users', metadata ,
... 列('id', 整数, プライマリキー=True),
... 列('名前', String(40)),
... 列('メール', String(120 )))
>>>
>>> users_table.create()
2014-01-09 10:03:32,436 INFO sqlalchemy.engine.base.Engine
CREATE TABLE ユーザー (
id INTEGER NOT NULL、
name VARCHAR(40)、
email VARCHAR(120)、
PRIMARY KEY (id)
)

>2014-01-09 10:03:32,436 情報 sqlalchemy.engine.base.Engine ()
2014-01-09 10:03:32,575 情報 sqlalchemy.engine.base.Engine COMMIT
>> ; >


上記のコードを実行すると、ID、名前、電子メールの 3 つのフィールドを持つユーザー テーブルが作成されます

コードをコピー コードは次のとおりです:(env)ghost@ghost-H61M-S2V-B3:~/ project/flask /fsql$ sqlite3 sqlalchemy.db
SQLite バージョン 3.7.13 2012-06-11 02:05:22
手順については「.help」と入力してください
「;」で終わる SQL ステートメントを入力してください
sqlite> .tables
users
sqlite>


3. 基本操作、


を挿入します。テーブルが既に存在する場合、自動ロードを使用して


を設定することはできません。

コードをコピー コードは次のとおりです:>>> from sqlalchemy import *
>>> *
>>> エンジン = create_engine('sqlite:///./sqlalchemy.db', echo=True)
>>> メタデータ = MetaData(engine)
> ;> > users_table = Table('users', メタデータ, autoload=True)
2014-01-09 10:20:01,580 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("users")
2014-01 -09 10:20:01,581 INFO sqlalchemy.engine.base.Engine ()
2014-01-09 10:20:01,582 INFO sqlalchemy.engine.base.Engine PRAGMA external_key_list("users")
2014- 01-09 10:20:01,583 INFO sqlalchemy.engine.base.Engine ()
2014-01-09 10:20:01,583 INFO sqlalchemy.engine.base.Engine PRAGMA Index_list("users")
2014 -01-09 10:20:01,583 INFO sqlalchemy.engine.base.Engine ()
>>> users_table
Table('users', MetaData(bind=Engine(sqlite:/) //. /sqlalchemy.db)), Column('id', INTEGER(), table=,primary_key=True, nullable=False), Column('name', VARCHAR(length=40), table =), Column('email', VARCHAR(length=120), table=), schema=None)
>>>


挿入ハンドルをインスタンス化します

コードをコピー コードは次のとおりです:

>>> i = users_table.insert()
>>> i

>gt;>gt;> print i
INSERT INTO users (id, name, email) VALUES (?, ?, ?)
>>> i.execute(name='rsj217', email='rsj21@gmail.com')
2014-01-09 10:24:02,250 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name, email) VALUES (?, ?)
2014-01-09 10:24:02,250 情報 sqlalchemy.engine.base.Engine ('rsj217', 'rsj21@gmail.com')
2014-01-09 10:24 :02,251 INFO sqlalchemy.engine.base.Engine COMMIT

>>> i.execute({'name': 'ghost'},{'name': 'test'})
2014-01-09 10:24:57,537 INFO sqlalchemy.engine.base.Engine INSERT INTO users (name ) 値 (?)
2014-01-09 10:24:57,537 情報 sqlalchemy.engine.base.Engine (('ghost',), ('test',))
2014-01-09 10 :24:57,537 INFO sqlalchemy.engine.base.Engine COMMIT

>>>

データ库の内容は

です

复制代码代码如下:

sqlite> select * from users;
1|rsj217|rsj21@gmail.com
2|ghost|
3|test|
sqlite>

削除と挿入のような都が必要な先例 sqlalchemy.sql.dml オブジェクト

三は ORM を使用します

orm を使用します、つまり Python クラスとデータ塊のテーブルを映射、免去直接写 SQL 语句

创建映射

复制代代码如下:

>>> class User(object):
... def __repr__(self):
... return '%s(%r, %r)' % (self.__class__.__name__, self.name, self.メール)
...
>>> Mapper(User, users_table) # 创建映射

>>> ul = ユーザー()
>>> ul.name
>>> print ul
User(None, None)
>>> print ul.name
なし
>>>

設立会话


查询

复制代码代码如下:

>>> session = create_session()
>>> session

>>>> query = session.query(User)
>>> query

>>> u = query.filter_by(name='rsj217').first()
2014-01-09 10:44:23,809 INFO sqlalchemy.engine.base.Engine SELECT users.id AS users_id、users.name AS users_name、 users.email AS users_email
FROM users
WHERE users.name = ?
LIMIT ? OFFSET ?
2014-01-09 10:44:23,809 INFO sqlalchemy.engine.base.Engine ('rsj217', 1, 0)
>>> u.name
u'rsj217'
>>>

插入

复制代码代码如下:

>>> sqlalchemy インポートから *
>>> sqlalchemy.orm からインポート *
>>> Engine = create_engine('sqlite:///./sqlalchemy.db')
>>>メタデータ = MetaData(エンジン)
>>> users_table = Table('users', メタデータ, autoload=True)
>>>クラス ユーザー(オブジェクト): pass
...
>>>マッパー(ユーザー, ユーザーテーブル)
<0x18185d0 のマッパー;ユーザー>
>>>セッション = sessionmaker(bind=engine)
>>> session = Session()
>>> u = User()
>>> u.name = 'new'
>>> session.add(u)
>>> session.flush()
>>> session.commit()
>>>

注意: セッションを確立する方法、sqlalchemy のバージョンが異なる sessionmaker の方法よりも優れています

下にあるものを削除し、イヤホン等の高レベルの操作を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。