• sqlalchemy 查询结果转json个人解决方案


    参考了网上很多资料,自己搞了一个适合的

    在model 内增加一个函数:

    class User(db.Model):
        __tablename__ = 'user'
    
        userid = db.Column(INTEGER(11), primary_key=True, comment='用户ID')
        phone_title = db.Column(CHAR(10), comment='电话抬头')
        phone = db.Column(INTEGER(50), comment='用户电话')
        account = db.Column(db.String(255), primary_key=True,
                            comment='用户账户,备注:用户可以使用其他方式登录,但是在系统必须拥有自己的账户')
        email = db.Column(db.String(255), comment='用户邮箱')
        name = db.Column(CHAR(60), comment='用户名称')
        password = db.Column(db.String(255))
        token = db.Column(VARCHAR(255), comment='用户登录验证')
        pre = db.Column(db.String(255), comment='用户个人介绍')
        c_time = db.Column(DateTime, comment='用户创建时间')
        photo = db.Column(db.String(255), comment='用户头像保存路径')
        login_time = db.Column(DateTime, comment='用户最后登录时间')
        status = db.Column(INTEGER(
            1), comment='账户状态:\r\n0、正常\r\n1、冻结\r\n2、过期\r\n3、未激活(未分配团队)\r\n')
        type = db.Column(db.String(255), comment='用户类型:0、app用户 1、后台用户 2、第三方用户')
        accountType = db.Column(INTEGER(11), comment='用户类型2:0、超级管理员 1、后台用户 2、普通用户')
    
        def to_json(self): # ---------------------
            dict = self.__dict__
            if "_sa_instance_state" in dict:
                del dict["_sa_instance_state"]
            return dict

    接口调用:

    from app.model import User
    from app import db, js_ret
    from flask import Blueprint, request, make_response, Response, render_template, url_for, current_app as lg
    session = db.session
    
    
    users = Blueprint('users', __name__, url_prefix='/users')
    
    @users.route('/', methods=['POST', 'get'])
    def us():
        """
        查询用户列表
        type:查询用户类型
        page_number:每页条数
        page_index : 页码
        token:操作人token
        c_time:操作时间
    
        """
        page_number = request.form.get('page')
        page_index = request.form.get('page_index')
    
        user_list = User.query.paginate(1,2,False)
        de = []
        for i in user_list.items:
            de.append(i.to_json())
    
        return js_ret(0,'',de)

    然后使用jsonify 方法转换一下格式:

    from flask import jsonify
    
    def js_ret(code = None,msg = None,data = None):
        """
        return json 返回参数处理
        code :状态码
        data:返回结果
        """
        rt_data = {
            "code":code,
            "msg":msg,
            "data":data
            
        }
        jss = jsonify(rt_data)
        return make_response(jss,200)

    还有就是日期格式的问题,jsonify 转换的日期格式默认是 http格式,我是直接改了一下源码使用,不推荐使用这种方式,

    如果不想使用jsonify的话,直接定义一个函数,对json.dumps方法传参就好,两种方式并没有太大的区别:

    区别:https://blog.csdn.net/kun1280437633/article/details/80377734

    def json_serial(obj):
        # 处理日期格式问题
        """JSON serializer for objects not serializable by default json code"""
    
        if isinstance(obj, (datetime, date)):
            if isinstance(obj,datetime):
                return obj.strftime("%Y-%m-%d %H:%M:%S")
            else:
                return obj.soformat()
        raise TypeError ("Type %s not serializable" % type(obj))
    # print (dumps(datetime.now(), default=json_serial))
    def js_ret(code = None,msg = None,data = None):
        """
        return json 返回参数处理
        code :状态码
        data:返回结果
        """
        rt_data = {
            "code":code,
            "msg":msg,
            "data":data
            
        }
        jss = jsonify(rt_data)
        return make_response(jss,200)

    其他方案:

    https://blog.csdn.net/liu_xing_hui/article/details/8956107

     https://www.cnblogs.com/eating-gourd/p/9997751.html

    时间戳转换:https://www.cnblogs.com/hanbowen/p/10062111.html

  • 相关阅读:
    mysql小白系列_04 datablock
    mysql小白系列_04 binlog(未完)
    mysql小白系列_03 体系结构-线程池
    mysql小白系列_02 mysql源码安装标准化
    国庆小长假来点不一样的,如何用Python爬取了全国近5000家旅游景点,一起来看
    python爬取p站排行榜并自动发送邮件-这个项目赚了500
    利用Azure backup备份和恢复Azure虚拟机(1)
    定制化Azure站点Java运行环境(5)
    定制化Azure站点Java运行环境(4)
    定制化Azure站点Java运行环境(3)
  • 原文地址:https://www.cnblogs.com/yc-c/p/12632702.html
Copyright © 2020-2023  润新知