Flaskベース05(ORM基本操作)

3695 ワード

データベース操作
挿入
​ 1.エンティティークラスのオブジェクト2を作成します.挿入完了db.session.add( )db.session.commit()
     
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:123456@localhost:3306/flask"

          ,         
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

              SQL  
app.config['SQLALCHEMY_ECHO'] = True

         
db = SQLAlchemy(app)

     
class Users(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), nullable=True, unique=True)
    age = db.Column(db.Integer)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, age, email):
        self.username = username
        self.age = age
        self.email = email

    def __repr__(self):
        return '' % self.username

クエリー(db.sessionベースおよびModelsベース)
dbベースセッションによるクエリー(マルチテーブルクエリーに適用)
1. db.session.query(Models1, Models2,...)
≪パラメータ|Parameters|oem_src≫:問合せ対象のエンティティー・クラス(表).複数のエンティティー・クラスの場合、複数の表を作成する接続問合せの戻り値に相当します.対応するクラスの問合せオブジェクトです.
2.クエリー実行関数
目的:query()に基づいて最終的なデータ構文を得る:db.session.query(Models).関数名()
 all():         query          

 first():   query           ,      ,  None

 first_or_404():   query           ,                404

 count():   query        

3.クエリーフィルタ関数
役割:データをフィルタリングし、一部の行のデータ構文を返す:db.session.query().フィルタ関数().実行関数()
 filter()          (  ,  ,  ,   )

 filter_by()          

 limit()           

 order_by()         

 group_by()          

     

4.フィルタ関数の詳細
filter()注意:条件はエンティティクラスでなければならない.属性の構成
1.       30      
    db.session.query(Users).filter(User.age > 30).all()

2.  id 1     
    db.session.query(Users).filter(Users.id==1).first()

3.      30  id  1      
    filter(  1,  2,...)
    db.session.query(Users).filter(Users.age > 30, id>1).all()

4.      30  id 1      
          ,     or_()
    db.session.query(Users).filter(or_(Users.id == 1, Users.age > 30)).all()

5.   email     'w' Users   --    
  db.session.query(Users).filter(Users.email.like('%w%'))

6.   id   [2,4]     Users   
  users = db.session.query(Users).filter(Users.id.in_([2, 4])).all()

7.  Users age 40-50        between 45 and 50
  users = db.session.query(Users).filter(Users.age.between(40,50)).all()

filter_by()注意:等値判断しかできず、不等値はできません
   id  1   users    
  db.session.query(Users).filter_by(id=1).first()

limit()
1.  users        
db.session.query(Users).limit(2).all()
2.   users       3         2   
db.session.query(Users).limt(2).offset(3).all()

order_by()
   id     
select * from users order by id desc;
         ,   id    
select * from user order by age desc, id asc
db.session.query(Users).order_by('age desc, id asc').all()

group_by()
1.  users         age     
select * from users groupby age
db.session.query(Users.age).group_by('age').all()

集約関数
  • func.AVg():平均値を求める
  • func.sum():求和
  • func.max():最大値を求める
  • func.min():最小値を求める
  • func.count():空でない数量を求める
  • 1.  users          
    select avg(age) from users;
    #         
    from sqlalchemy import func
    db.session.query(func.avg(Users.age)).all()
    
    2.users  ,     ,          
    select age, avg(age) from users group by age
    #         
    db.session.query(func.avg(Users.age)).group_by('age').all()
    

    Modelsクラスベースのクエリー(単一テーブルクエリー用)
    構文:Models.query.クエリー実行関数()クエリー実行関数