Flaskベース05(ORM基本操作)
3695 ワード
データベース操作
挿入
1.エンティティークラスのオブジェクト2を作成します.挿入完了
クエリー(db.sessionベースおよびModelsベース)
dbベースセッションによるクエリー(マルチテーブルクエリーに適用)
1.
≪パラメータ|Parameters|oem_src≫:問合せ対象のエンティティー・クラス(表).複数のエンティティー・クラスの場合、複数の表を作成する接続問合せの戻り値に相当します.対応するクラスの問合せオブジェクトです.
2.クエリー実行関数
目的:query()に基づいて最終的なデータ構文を得る:db.session.query(Models).関数名()
3.クエリーフィルタ関数
役割:データをフィルタリングし、一部の行のデータ構文を返す:db.session.query().フィルタ関数().実行関数()
4.フィルタ関数の詳細
filter()注意:条件はエンティティクラスでなければならない.属性の構成
filter_by()注意:等値判断しかできず、不等値はできません
limit()
order_by()
group_by()
集約関数 func.AVg():平均値を求める func.sum():求和 func.max():最大値を求める func.min():最小値を求める func.count():空でない数量を求める
Modelsクラスベースのクエリー(単一テーブルクエリー用)
構文:Models.query.クエリー実行関数()クエリー実行関数
挿入
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()
集約関数
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.クエリー実行関数()クエリー実行関数