初心者入門Sqlalchemy

3885 ワード

この文書は、著者の尤炳棋の授権網易雲コミュニティによって発表された.
網易クラウドコミュニティへようこそ、より多くの網易技術製品の運営経験を理解してください.
入社考拉は半年余り、KLQAプラットフォームの開発に従事しており、KLQAプラットフォームの後端はpythonベースのflaskフレームワークで構築されている.Flaskフレームワークで使用されるデータベースはsqlalchemyです.SqlalchemyはORM技術に基づくリレーショナル・データベースで、非常に使いやすい.KLQAプラットフォームを開発したこの半年、Sqlalchemyの実戦経験を積んだ.
ORMとは?
ORMは英語Object Relational Mappingの略で、中国語に訳して「対象関係マッピング」と呼ぶ.一般的に、ORMはデータベース内のテーブルをpyhonのクラスにマッピングすることで、データベースの操作をクラスに変換することができ、非常に便利です.
Sqlalchemyのインストール
easy_を介してインストールインストールはeasy_を入力するだけですinstall sqlalchemyでいいです.pipでインストールした場合、コマンドはsudo pip install sqlalchemyです.
データベースの接続
データベースに接続するには、configなどのpythonファイルを新規作成できます.py、ファイルにSQLALCHEMY_を設定するDATABASE_URI定数は、ORM下位層で使用されるデータベースへのアクセスURLを宣言します.
SQLALCHEMY_に設定DATABASE_URI='mysql://ユーザー名:パスワード@データベースアドレス/データベース名?charset=utf8’.SQLALCHEMY_を設定することもできますCOMMIT_ON_TEARDOWN定数、
この定数がTrueの場合、要求が終了するたびにデータベースの変動が自動的にコミットされます.さらにcreate_engineを作成すればいいです.
マッピングクラスの作成
たとえば、mysql文を使用してNewTableテーブルを作成します.mysql文は次のようになります.
CREATE TABLE ` NewTable` (
`id`  int(10) NOT NULL AUTO_INCREMENT ,
`column1`  text NULL ,
`column2`  text NULL ,
`column3`  varchar(1000) NULL ,
`column4`  datetime NULL ,
PRIMARY KEY (`id`)
);

対応するマッピングクラスは次のとおりです.
class NewTable(db.Model):
    __tablename__ = 'weekly_report'
    id = db.Column(db.Integer, primary_key=True) 
    column1 = db.Column(db.Text)   
    column2 = db.Column(db.Text) 
    column3 = db.Column(db.String)
    column4 = db.Column(db.DateTime, default=now())
 
def__init__(self,column1, column2, column3, column4):
        self.column1= major_item
        self.column2= major_project
        self.column3= report_remark
        self.column4= create_person

マッピングクラスがsqlalchemyのModelクラスを継承するには、_tablename__ クラスがマッピングするデータベース・テーブル名を表し、各テーブル・フィールドがクラスのメンバー変数にマッピングされます.データベースの基本的な「添削・改ざん」をご紹介します
調べる
column 3がメールボックスに等しいレコードを検索する場合は、filter()メソッドを使用します.
db.session.query(NewTable).filter(NewTable.column3 == [email protected])
後につけるとall()はlistを返し、first()を加えるとクエリ結果の最初のエントリを返します.
db.session.query(NewTable).filter(NewTable.column3 == [email protected] ).all()クエリー結果をリスト形式で返す
db.session.query(NewTable).filter(NewTable.column3 == [email protected] ).first()は、クエリー結果の最初のエントリを返します.
増加
例えば記録を追加します
new_record = NewTable(column1, column2, column3, column4)
db.session.add(new_record)
db.session.commit()

削除
すべてのcolumn 3が私のメールボックスに等しいレコードを削除する場合は、このように操作します.
    db.session. query(NewTable).filter(NewTable.column3 == [email protected]).delete()
改める
データベース内のレコードを変更するにはupdata()メソッドを使用します.データベース内のすべての作成者が私のレコードであることを変更します.
   db.session. query(NewTable).filter(NewTable.column3 == youbingqi@corp. netease.com).updata({NewTable.column3 :”youbingqi”})
データベース結合テーブルクエリー
たとえば、JiraProjectTaskテーブルのタイプが「プロジェクト」のプロジェクトをクエリーする場合、プロジェクトのタイプはJiraTaskテーブルに保存されるので、JiraTaskとテーブルを結合してクエリーします.次の連結テーブルクエリの結果は2つのリストを返します.戻り結果を2つの変数で保存する必要があります.最初の変数はquery()メソッドの最初のテーブルのフィールドを保存し、2番目の変数はquery()メソッドの2番目のテーブルのフィールドを保存します.
project_list, task_list = db.session.query(JiraProjectTask, JiraTask).filter(JiraTask.jira_key==JiraProjectTask.jira_key,JiraTask.jira_type=='プロジェクト').all()
その他の一般的な方法:
   or_ , クエリー・データベースは、フィルタにフィルタ条件がまたはであることを示す関係です.
   .order_by、クエリー結果をフィールドごとにソートします.
   .like()は、複数の文字を%でマッチングするファジイクエリメソッドです.
   .group_by、クエリー結果をグループ化します.
   .count()は、クエリー結果の個数を計算し、性能が悪く、推奨しない.all()を使用してlistリストを返し、len()メソッドで個数を求めることを推奨する.
まとめ:
Sqlalchemyは、ORMベースのリレーショナル・データベースであり、テーブルとクラスを相互マッピングすることで、データベース・テーブルの1行のレコードを1つのオブジェクトと相互に自動変換し、マッピング・クラスを操作することでデータベースを変更することができ、mysqldb、pymysqlなどのORMモデルを採用していないデータベースに比べて操作が容易で簡単で、使いやすい.
クラウドセキュリティ(シールド)コンテンツセキュリティ、認証コードなどのサービスを無料で体験
より多くの網易技術、製品、運営経験を共有するには、クリックしてください.
関連記事:【推奨】動作式検証コードの将来性