flask中sqlalchemy增删改查

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from models import *
db = SQLAlchemy()
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:123@localhost:9508/flask_test"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
db.init_app(app)

# 添加单条数据
obj = User(name="大黄")
db.session.add(obj)
db.session.commit()
# 添加多条数据
db.session.add_all([
        User(username = "大黄"),
        User(username = "小黄")
    ])
db.session.commit()

User.query.filter(User.id > 2).delete()
db.session.commit()

User.query.filter(User.id == 2).update({"name":"小王"},synchronize_session=False)
db.session.commit()

我们大部分的时间都是在进行查询,过滤查询一般使用filterfilter_byfilter查询时形式为表名.字段名类名.属性名),比较时用“==”,filter_by查询时直接用字段名属性名),比较时用“=”,但filter_by不支持大于(>)、小于(<)查询以及and_和or_查询,因为他接受的是一个**kwargs参数,必须是一个字典,get查询只能接受主键查询。

基本查询:

article = Article.query.get(2) # 查询主键id为2的信息
User.query.all() # 查询表中所有数据
User.query.filter(User.id > 10).all() # 查询id>10的所有信息
User.query.filter(User.id > 10).first() # 查询符合条件的第一条记录 

进阶查询:
text

# text接收一个原生sql语句字符串,可使用.params()传递参数
Article.query.filter(db.text("Article.id > :value")).params(value=2).all()
Article.query.from_statement(db.text("SELECT * FROM Article")).all()

and_,or_

Article.query.filter(db.and_(Article.id > 2,Article.title == "致橡树")).all()
Article.query.filter(db.or_(Article.id > 2,Article.title == "致橡树")).all()
Article.query.filter(db.and_(Article.id > 2,db.or_(Article.title == "致橡树",Article.author == "舒婷"))).all()

通配符like

Article.query.filter(Article.title.like("致%")).all()
# %可匹配0个至多个字符,_只能匹配一个字符

limit、offset(切片)

Article.query.all()[1:5]

排序order_by

# 正序排序
Article.query.order_by("id").all()
Article.query.order_by(Article.id).all()
Article.query.order_by(Article.id.asc()).all()
# 逆序排序
Article.query.order_by(db.text("-id")).all()
Article.query.order_by(Article.id.desc()).all()

聚合查询func

# func后可点出聚合函数
db.session.query(db.func.max(Article.id)).all()

分组查询group_by

db.session.query(db.func.max(Article.id),db.func.sum(Article.id),db.func.min(Article.id)).group_by(Article.title).having(db.func.min(Article.id) > 2).all()

连表查询

db.session.query(User,Article).filter(User.id == Article.author).all()
db.session.query(User).join(Article).all()

还有一些其他可参考https://www.cnblogs.com/wupeiqi/articles/8259356.html,不想写了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值