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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM