SQLAlchemyののPythonのORM

最先端の
オブジェクトリレーショナルマッピングORMは、一般的な技術の実用化にプログラミングするために使用され、このブリッジを介して相互に変換することがオブジェクトとリレーショナル、オブジェクトタイプのデータの受信と、リレーショナルデータベースのデータ間のブリッジを構築します。単にORMのプログラミングモデルを使用することで、開発者は、データベースを操作するためのSQL文を記述する必要はありませんが、関数やメソッドの範囲の使用は、データベース上で操作を完了することを意味します。

MySQLの、SQLiteの、Oracleや他のリレーショナルデータベースと互換性があり、現在人気のある主SQLAlchemyの枠組みのPythonのORMフレームワーク。

準備
SQLAlchemyのフレームワークをインストールするには

PIP3はSQLAlchemyのインストール
接続されたデータベースの
形式で、URI、データベース・アカウント・パスワードの種類等を示すためのパラメータを指定するために接続されたデータベースに接続したときにSQLAlchemyのモジュール。

(1)MySQLデータベース

mysqlの+ frameworkname://ユーザー名:パスワード @アドレス:ポート/データベース名
のパラメータは説明しました:

frameworkname:接続を使用して、モジュール名データベース、このセクションPyMySQLで使用されます。
ユーザ名:データベースのユーザー名、
パスワード:パスワードの接続;
アドレス:接続アドレス、
ポート:ポート;
データベース名:データベース名。
(2)SQLiteデータベース

#UNIX / Macのシステム

のSQLite:////absolutepath/dbname.db

#Windowsシステム

のsqlite:/// C:\\ absolutepath \\ dbname.db
のパラメータ:

absolutepath:絶対パス;
DBNAME:データベースファイル名。

Connect_orm.py#
SQLAlchemyのインポートからはcreate_engine

試して:
#接続MySQLデータベース、アドレス:localhostを:3306、アカウント:ルート、パスワード:123、データベース:テスト
MySQLEngineのcreate_engine =(「+ MySQLのpymysql://ルート:localhostの@ 123:3306を/テスト?のcharset = UTF8 'エンコード=' UTF8 ')
印刷(' MySQLデータベースの接続成功'MySQLEngine)
のSQLiteデータベース接続、カレントディレクトリがtest.dbというファイルが存在しない場合は、自動的に生成され
SQLiteEngine = create_engine(' SQLiteの:///:test.dbという'エンコード=' UTF-8 ')。
印刷(' SQLiteのデータベース接続成功、SQLiteEngine)
Eのような例外を除いて:
印刷( 'データベース接続の失敗'、e)の
実行結果:

MySQLデータベースの接続成功エンジン(mysqlの+ pymysql://ルート :*** @ localhostの:? 3306 /学生のcharset = UTF8)
SQLiteデータベースに成功エンジン(sqliteの:///:test.dbという)が接続されて
、削除、追加、変更、チェック
1.データベーステーブルを作成するには、
STUDENTテーブルを作成します:

列名

タイプ

リマーク

SNO

CHAR(10)

NOT NULLを

SNAME

CHAR(20)

主キー

手順: 

Create_table_orm.py#
SQLAlchemyのインポート列、文字列、create_engineから
sqlalchemy.ormインポートsessionmakerから
declarative_base sqlalchemy.ext.declarativeのインポートからの

#は、基本クラスの作成
BASE = declarative_base()

を学生がオブジェクト定義
クラスの学生(BASE)を:
#テーブル名を: STUDENT
= '学生__tablename__
#学生数
のSnOが列(文字列(10))=
#名
SNAME =列(文字列(20)で、PRIMARY_KEY = TRUE)
は、パラメータのテーブル作成
__table_args__ = {
: "UTF8" "mysql_charset"
}

試しを:
#MySQLデータベースに接続し、アドレス:localhostを:3306、アカウント:ルート、パスワード:123、データベース:テスト
MySQLEngine = create_engine( '+ MySQLのpymysql://ルート:localhostの@ 123:?3306 /文字セット=テストUTF8'、エンコーディング= 'UTF-8')
#STUDENTテーブル作成
BASE.metadata.create_all(MySQLEngine)
'STUDENTテーブルが正常に作成')印刷
E AS例外を除いて:
印刷( "SQLiteのデータベース接続の失敗"、E)
2.データ
#1 insertData_orm.pyを
柱SQLAlchemyのインポートから、文字列、create_engine
sqlalchemy.ormインポートsessionmakerから
declarative_base sqlalchemy.ext.declarativeインポートから

#基底クラスの作成
ベース= declarative_base()

を学生がオブジェクト定義
クラスの学生(ベース):
名#テーブル:学生
__tablename__は= '学生
#学生IDを
カラム=たSnO(文字列(10))

SNAME =列(文字列(20)、PRIMARY_KEY = TRUE)
パラメータテーブル作成
__table_args__ = {
"mysql_charset": "UTF8"を
}

してみてください:
#MySQLデータベースに接続
MySQLEngine = create_engine( '+ MySQLのpymysql://ルート:123 localhostの@:?3306 /文字セット= UTF8テスト'、エンコード= 'UTF8')
は、MySQLの型を作成
MySQLSessionを= sessionmaker(バインド= MySQLEngine)
セッションオブジェクト#を作成します
=()セッションMySQLSessionを

ORMの使用#インサートデータ
#は、学生オブジェクトを作成
スチュー=学生(SNAME =「ジョン・ドウ」、のSnO =「2016081111」)
作成されたオブジェクトがセッションに追加さ
session.add(スチュー)

ネイティブSQLの挿入データの使用#
session.executeを(
"INSERT INTO学生VALUES( '2016081115'、 '呉牙')、( '2016081116'、 '胡越')")
データベースに送信#
Session.commit()
セッションを閉じます
Session.close()
印刷(「データが正常に挿入されている」)
E AS例外を除い:
印刷( "SQLiteデータベース接続失敗」、E)
3.クエリデータ
SelectData_orm.py番号
SQLAlchemyのインポート列、文字列、create_engineから
sqlalchemy.ormインポートsessionmakerから
sqlalchemy.ext.declarativeインポートからはdeclarative_base

#は、基本クラスの作成
BASE = declarative_base()

を学生がオブジェクト定義
:クラスの学生(BASE)
テーブル名を:
__tablename__ = '学生

SNAME =列(文字列(20)と、PRIMARY_KEY = TRUE)
のSnO =列(文字列(10))

DEF __str __(自己):出力データの#フォーマット問い合わせる
リターン'%sに、%S' %( self.sname、self.sno)

試してみる:
#MySQLデータベースに接続
MySQLEngine = create_engine( '://ルート:localhostの@ 123:+ MySQLのpymysql?テストUTF8 3306 /文字セット='、エンコード= 'UTF8')
で作成MySQLの型
MySQLSession = sessionmaker(バインド= MySQLEngine)
セッションオブジェクトを作成します
= MySQLSessionセッション()
照会番号2016081111学校の生徒
のStu = session.query(学生).filter(Student.sno == '2016081111')
クエリのすべてのデータ
Stus = session.query(学生).ALL()
を印刷(「クエリ結果の種類:」、タイプ(ステュー))
を印刷(「すべてSTUDENTテーブル:「)
Stusの行のために:
印刷(行)
#セッションクローズ
Session.closeを()
E AS例外を除い:
印刷(」 SQLiteデータベース接続失敗」、e)の
プログラムの実行結果:

クエリ結果の種類:<クラスのsqlalchemy.orm.query.Query '>
すべてSTUDENTテーブル:
呉牙、2016081115
ジョー・スミス、2016081111
胡越、2016081116
4.データ変更
#のselectData_orm.pyを
、SQLAlchemyのインポート列、文字列からcreate_engine
sqlalchemy.ormインポートsessionmakerから
sqlalchemy.ext.declarativeインポートからdeclarative_base

#基底クラスの作成
ベースを= declarative_base()

は、学生がオブジェクトを定義する
クラスの生徒(ベース):
テーブル名を:
__tablename__ = '学生

SNAME =列(String型( 20)は、PRIMARY_KEY =真)
のSnOカラム=(文字列(10))

DEF __str __(自己):#クエリ出力データのフォーマット
リターン'%S、Sの%' %(self.sname、self.sno)

試み:
# MySQLデータベースの接続
= Create_engine MySQLEngine( '+ MySQLのpymysql://ルート:123ローカルホスト:?3306 /文字セット= UTF8テスト@'、エンコード= 'UTF8')
#MySQLの型の作成
MySQLSessionを= sessionmaker(バインド= MySQLEngine)
セッション・オブジェクトを作成します
= MySQLSessionセッション()
の問い合わせ番号2016081111学校の生徒
。スチュー= session.query(学生).filter(Student.sno == '2016081111')まず()
印刷( '変更前:'、スチュー)
#名の変更華がある
Stu.sname =「華」
データベース#にコミット
Session.commit()
プリント:(、スチュー「変更後」)
セッションクローズ
Session.closeを()
Eなどの例外を除いて:
印刷(「接続がデータベースSQLiteのに失敗しました」、e)の
プログラムの実行結果:

変更する前に:ジョー・スミス、2016081111を
した後:李華、2016081111
5.削除データ
#1 deleteData_orm.py
SQLAlchemyのインポート列、文字列、create_engineから
sqlalchemy.ormインポートsessionmakerから
sqlalchemy.ext.declarativeインポートからdeclarative_base

#は、基本クラスの作成
BASEを= declarative_base()

学生のオブジェクトの定義
クラスの生徒(BASE)を:
#テーブル名:
__tablename__ = '学生

SNAME =列(文字列(20)、PRIMARY_KEY = TRUE)
のSnO =列(文字列(10))

DEF __str __(自己) :#出力データのフォーマット照会
リターン'%Sを、S%' %(self.sname、self.sno)

のtry:
のMySQLデータベース接続
MySQLEngine = create_engine(「mysqlの+ pymysql ://ルート:localhostの@ 123:3306 /テスト?のcharset = UTF8 'エンコード=' UTF8「)
は、MySQLタイプを作成します
= Sessionmaker MySQLSession(バインド= MySQLEngine)
セッションオブジェクトの作成
セッション= MySQLSession()
の学生のための#クエリ学生番号2016081111を
前に= session.query(学生).filter(Student.sno == '2016081111')。まず()
を印刷( '削除前:'、前に)
#は、データを削除する
。session.queryを(学生).filter(Student.sno == '2016081111')、削除()
データベースに提出#
Session.commit()
= session.query後(学生。).filter(Student.sno == '2016081111')まず()
印刷( '削除'、後)
#セッションクローズ
Session.closeを()
E AS例外を除い:
印刷( "SQLiteのデータベース接続の失敗"、電子)
プログラムの実行結果:

李華、2016081111を:削除する前に
削除した後:なし
 

おすすめ

転載: www.cnblogs.com/aibabel/p/11489566.html