Flaskフレームワーク学習ノート-モデルモデルモデル

10767 ワード

記事の目次
  • 概要
  • 1. ORM
  • 2.原生SQLとORM比較
  • FlaskのORM
  • 1. flask-sqlalchemy
  • 2.接続データベース
  • 3.FlaskでORM
  • を使用する
  • データ移行
  • モデル
  • 1.フィールドタイプ
  • .共通拘束
  • 3.モデルの作成
  • 概要
    Flaskのデフォルトでは、データベース操作のAPIは提供されていません.独自のプロジェクトに適したデータベースを選択して使用できます.
    Flaskでは独自の選択を元の文で実現したり、ORM(SQLAlchemy,MongoEngine)を選択したりすることができます
    1. ORM
    FlaskはModelを通じてデータベースを操作して、あなたのデータベースのタイプがMySqlあるいはSqliteであることに関わらず、Flaskは自動的にあなたに相応のデータベースのタイプのSQL文を生成するように手伝って、だからSQL文とタイプに関心を持つ必要はなくて、データに対する操作Flaskは私達に自動的に完成するように手伝います.モデルを書けばいい
    Flaskオブジェクトリレーションシップマッピング(Object Relational Mapping、略称ORM)フレームワークを使用してデータベースを操作する
    ORM(Object Relational Mapping)オブジェクト関係マッピングは、オブジェクト向けプログラミング言語における異なるタイプのシステムのデータ間の変換を実現するプログラム技術である
    2.原生SQLとORMの比較
    オリジナルSQLの欠点:
  • コードの利用率が低く、条件が複雑なコード文が長ければ長いほど、似たような文が多い
  • いくつかのSQLは業務ロジックの中でつづったので、修正は業務ロジック
  • を理解する必要があります
  • 直接書くSQLはSQLの問題を軽視しやすい
  • ORMの利点:
  • の使いやすさで、SQL
  • の重複を効果的に減らすことができます.
  • 性能損失が少ない
  • 設計は柔軟で、複雑なクエリー
  • を簡単に実現できます.
  • 移植性が良い
  • FlaskのORM
    1. flask-sqlalchemy
    FlaskはPythonが持参したORM:SQLAlchemyを使用
    Flaskのサポート用にプラグインflask-sqlalchemyをインストール
    pip install flask-sqlalchemy
    

    2.データベースへの接続
    (1)SQLite接続
    DB_URL = 'sqlite:///sqlite3.db'
    #         
    # SQLite            ,          
    

    (2)MySQLへの接続
    #      
    DB_URL = 'mysql+pymysql://root:[email protected]:3306/flaskdb'
    #      
    USERNAME = 'root'
    PASSWORD = 'root'
    HOSTNAME = '127.0.0.1'
    PORT = 3306
    DATABASE = 'flaskdb'
    DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(
      USERNAME,
      PASSWORD,
      HOSTNAME,
      PORT,
      DATABASE)
    

    3.FlaskでORMを使う
    データベースに接続するには構成を指定する必要があります
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    DB_URL = 'sqlite:///sqlite3.db'
    
    app = Flask(__name__)
    #          DB_URL
    app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
    #         
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    #    
    db = SQLAlchemy()
    db.init_app(app)
    
    if __name__ == '__main__':
        app.run()
    

    データ移行
    データ移行にはプラグインflask-migrateが必要です
    (1)取付
    pip install flask-migrate
    

    (2)初期化
    from flask import Flask
    from flask_script import Manager
    from flask_sqlalchemy import SQLAlchemy
    from flask_migrate import Migrate, MigrateCommand
    
    DB_URL = 'sqlite:///sqlite3.db'
    
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    db = SQLAlchemy()
    db.init_app(app)
    #   app db  migrate     
    migrate = Migrate()
    migrate.init_app(app=app, db=db)
    #  manager       
    manager = Manager(app)
    manager.add_command('db', MigrateCommand)
    
    if __name__ == '__main__':
        manager.run()
    

    (3)コマンドラインでの使用
    # manage.py: app.py     manage.py
    # db:          
    python manage.py db init		#      ,  migrations   
    python manage.py db migrate		#       
    python manage.py db upgrade		#         
    python manage.py db downgrade  	#         
    

    モデル#モデル#
    1.フィールドタイプ
    タイプ名
    Pythonタイプ
    説明
    Integer
    要点
    通常の整数、一般的に32ビット
    SmallInteger
    要点
    値の範囲の小さい整数を取って、普通は16ビットです
    BigInteger
    intまたはlong
    精度を制限しない整数
    Float
    float
    浮動小数点数
    Numeric
    decimal.Decimal
    定点数
    String
    str
    長い文字列
    Text
    str
    長い文字列、長い文字列または長さに制限のない文字列を最適化
    Unicode
    unicode
    Unicode文字列が長くなる
    UnicodeText
    unicode
    Unicode文字列が長くなり、長い文字列や長さに制限されない文字列が最適化されました
    Boolean
    bool
    ブール値
    Date
    datetime.date
    日付
    Time
    datetime.time
    時間
    DateTime
    datetime.datetime
    日付と時刻
    Interval
    datetime.timedelta
    時間間隔
    LargeBinary
    str
    バイナリファイル
    2.一般的な制約
    オプション名
    説明
    primary_key
    Trueに設定すると、この列がテーブルのプライマリ・キーになります.
    unique
    Trueに設定すると、この列に重複する値は許可されません.
    index
    Trueに設定すると、この列にインデックスが作成され、クエリーの効率が向上します.
    nullable
    Trueに設定すると、この列は空の値を使用できます.Falseに設定した場合、この列には空の値は使用できません.
    default
    この列のデフォルト値を定義します
    autoincrement
    じこぞうか
    3.モデルの作成
    class User(db.Model):
        #   
        __tablename__ = 'user'
        #   (id)      ,     
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        name = db.Column(db.String(20), unique=True)
        age = db.Column(db.Integer, default=1)