增
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()
查
我们大部分的时间都是在进行查询,过滤查询一般使用filter
和filter_by
,filter
查询时形式为表名.字段名
(类名.属性名
),比较时用“==”,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,不想写了!