Flask sqlalchemy 分表实现 及 相关操作

业务需求 如果单表的数据量过大 需要分表操作
以下是个人的用法 以及操作
希望有错误的地方 大家指出来
有更优方法的朋友可以不吝赐教
先行谢过~

from api.extensions import db

class XoTree(object):
    _mapper = {}

    @staticmethod
    def model(conf_id):
        class_name = 'xo_tree_%s' % conf_id

        ModelClass = XoTree._mapper.get(class_name, None)
        if ModelClass is None:
            ModelClass = type(class_name, (db.Model,), {
                '__module__': __name__,
                '__name__': class_name,
                '__tablename__': 'xo_tree_%s' % conf_id,

                'tree_id': db.Column(db.Integer, primary_key=True),
                'created_at': db.Column(db.DateTime, default=lambda: datetime.datetime.now()),
                'updated_at': db.Column(db.DateTime, onupdate=lambda: datetime.datetime.now()),
                'portfolio_id': db.Column(db.Integer, index=True),
                'portfolio': db.Column(db.String(128)),
                'children': db.Column(db.Text()),
                'trading_day': db.Column(db.String(32), index=True),
                'trading_day_timestamp': db.Column(db.BIGINT),
            })
            XoTree._mapper[class_name] = ModelClass

        cls = ModelClass()
        return cls

这样的一个class就可以实现分表的操作了
接下来讲如何操作表

from sqlalchemy import desc


# 创建表
obj = XoTree.model(conf_id)
obj.metadata.create_all(db.engine)

# 单条数据新增
obj = XoTree.model(conf_id)
obj.trading_day = 20200101
db.session.add(obj)

#批量插入
db.session.execute(obj.__table__.insert(), data_list)

# 检查表是否存在
tree_exsist = db.engine.dialect.has_table(db.engine, 'xo_tree_%s' % conf_id)

# 查询
tree_obj = XoTree.model(conf_id)
tree_node = tree_obj.query.filter_by(trading_day=trading_day, portfolio_id=node['portfolio_id']).first()

# 查询最新数据 , 排序
obj = XoNodeData.model(conf_id)
obj.query.order_by(desc('trading_day')).first().trading_day

# 删除表中所有数据
if tree_exsist:
    tree_obj = XoTree.model(conf_id)
    tree_obj.query.delete()
    db.session.commit()


参考链接
https://blog.csdn.net/weixin_34204057/article/details/85737013
十分感谢

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值