最先端の
オブジェクトリレーショナルマッピング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を:削除する前に
削除した後:なし