Sqlalchemy 数据模型序列化(转JSON)

2022-11-23
阅读 3 分钟
4.8k
问题Sqlalchemy 可以很方便地做ORMapping,把数据库记录映射为业务实体类的实例,例如下面这样: {代码...} 但这种实例不方便序列化,比如要想在 Flask Web Service 接口中返回这个对象: {代码...} 或者是直接转 JSON 字符串: {代码...} 都会报错:Object of type Student is not JSON serializable。方法在网上搜的话...
封面图

Python + Sqlalchemy 对数据库的批量插入或更新(Upsert)

2022-11-06
阅读 3 分钟
11k
由于不同数据库对这种 upsert 的实现机制不同,Sqlalchemy 也就不再试图做一致性的封装了,而是提供了各自的方言 API,具体到 Mysql,就是给 insert statement ,增加了 on_duplicate_key_update 方法。
封面图

Mysql 数据库的批量插入或更新(Upsert)

2022-11-05
阅读 2 分钟
6.8k
这个问题已经困扰我一段时间了,对于大量数据的插入或更新,批量操作肯定比每条记录调用一次快得多,新数据可以用 insert 批量插入,老数据可以用 replace into 批量更新。但如果不知道数据是否存在(是否有唯一key和数据库中已有记录重复)想在一批数据库中,插入新记录,更新老记录怎么办?之前甚至想过封装一个函数,...
封面图

mysql海量数据表的归档

2022-09-13
阅读 2 分钟
2k
日常的业务系统,跟用户相关的操作数据,或者日志记录,往往会越来越多,而早期数据的查询需求没有那么强,就可以进行归档处理——作为冷数据保存,并从在线数据库中删除。
封面图

flask-sqlalchemy中使用cursor游标

2022-05-23
阅读 2 分钟
4.4k
假设某数据表有1亿条记录,都需要导出,或者做业务数据处理,用OR Mapping一次性读入内存显然是不可能的,那么显然要分段处理。常见的分段方式,是通过offset+limit来指定返回的记录窗口(flask-sqlalchemy直接提供了paginate对象实现分页,应该是对offset+limit的封装)。这种方式很直观,但缺点也很明显:每一段的都重...
封面图

mysql 查询语句中的 order by 对索引的影响

2022-03-12
阅读 4 分钟
3.8k
Mysql从5.0以后,索引的使用就相当智能了,甚至还支持索引聚合(一次查询使用多条索引),但昨天一次业务查询中,一条where子句(例如 where user_id=1000)明明可以使用联合索引,把扫描行限制在数千范围内的select语句,竟然使用了全主键索引扫描,导致花费将近40s秒才返回结果集。更神奇的是,该where子句只有特定的数...
封面图

在Sqlalchemy的查询中新共享filter

2022-03-06
阅读 1 分钟
1.9k
使用Python做web开发,OR Mapping的部分,通常会用到Sqlalchemy,它是一个相对重量级的数据库封装层,提供了丰富的调用接口。
封面图