Flask-sqlalchemy 語法總結
Flask-sqlalchemy 語法總結
** DDL
db.create_all() :創建實體表
db.drop_all(): 刪除表
1)插入表
Db.session.add(user) #user是實體對象
##批量插入
Db.session.add_all([user1,user2,user3,…..])
##提交
Db.session.commit()
2) 修改表
如果實體有id,那麽就會變成更新操作,如果沒有就是默認插入操作
User.name=’xiaobing’
Db.session.add(user)
Db.session.commit()
3)刪除行
Db.session.delete(user)
Db.session.commit()
2,查詢
1)filter_by,filter
User.query.filter_by(role=user_role).all()
user_role = Role.query.filter_by(name=‘User‘).first()
filter_by是直接根據實體對象去轉化sql,filter是比較直接插入到sql中
常用的SQLALchemy查詢過濾器
過濾器 說明:
* filter() 把過濾器添加到原查詢上
* filter_by() 把等值過濾器添加到原查詢上
* limit() 限制原查詢返回的結果數量
* offset() 偏移原始查詢返回的結果
* order_by() 根據指定條件對原查詢進行排序
* group_by() 根據指定條件對原查詢結果進行分組
在users = db.relationship(‘User‘, backref=‘role‘, lazy=‘dynamic‘) 加入了lazy=’dynamic’參數,從而禁止自動執行查詢,user_role.users會返回一個尚未執行的查詢,因此可以在其上添加過濾器
user_role.users.order_by(User.username).all()
最常用的SQLALCHEMY列選項
選項名 說明
primary_key 主鍵
unique 是否允許重復值
index 設為True,為這一 列建立索引
nullable 設為True,允許使用空
default 默認值
2)like 模糊匹配
例如:
categorys = Category.query.filter(Category.name.like("%"+keyword+"%")).all()
這種好像也可以
hosts.query.whoosh_search(‘ce‘).all()
3)連表查詢
class Topic(db.Models): __tablename__ = ‘topic‘ id = db.Column(db.Integer, primary_key = True) content = db.Column(db.Text) class Reply(db.Models): __tablename= ‘reply‘ id = db.Column(db.Integer, primary_key = True) topic_id = db.Column(db.Integer) content = db.Column(db.Text)
查詢:
result=Reply.query.join(Topic, Reply.topic_id==Topic.id).add_entity(Topic).all()
然後遍歷值:
for res in result: res.Reply.xxx res.Topic.xxx
4)查詢返回指定的字段
User.query(User.name,User.email,User.sex).order(User.name.des()).limit(20).skip(200)
5)group by 分組查詢
第一種方式:
rs =User.query(StudentInfo.cls, func.sum(StudentInfo.cert_count)).group_by(StudentInfo.cls).all()
第二種方式:
Create_engine=SQLAlchemy.get_engine() sql = ‘select cls, sum(cert_count) from stuinfo group by cls‘ rs = engine.execute(sql) for row in rs: print row[0], row[1]
6) 分頁顯示paginate
pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config[‘ARTISAN_POSTS_PER_PAGE‘],error_out=False)
返回的pagination對象 包含以下:
Page:當前頁
Page_per:每頁顯示多少條
Total:總條數
Flask-sqlalchemy 語法總結