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:总条数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?