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,不想写了!

你可能感兴趣的:(sqlalchemy,flask)