sqlalchemy查询的结果querySet序列化为dict或者list

参考:SQLAlchemy将查询结果对象转为dict/list

  1. 连接数据库
mysql = "mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8".format(mysql_user, mysql_password, mysql_host, mysql_port, mysql_database)

# 创建对象的基类:
Base = declarative_base()
engine = create_engine(mysql)
Session = sessionmaker(bind=engine)
session = Session()
  1. 创建模型
from sqlalchemy import Column, DateTime, String, BigInteger

class Student(Base):
	id = Column(BigInteger, primary_key=True, autoincrement=True)
    name = Column(String, nullable=False)
    create_time = Column(DateTime, nullable=False, default=datetime.now)
  1. 把查询的querySet转化为dict
def query_set_to_dict(obj, conv=False):
    """
    Serialize SQLAlchemy Query Set to Dict
    conv: 是否将datetime转换成google.protobuf的Timestamp, true:是,false:否
    """
    obj_dict = {}
    for column in obj.__table__.columns.keys():
        val = getattr(obj, column)
        if isinstance(val, Decimal):
            val = float(val)
        if isinstance(val, datetime):
            if conv:
                val = Timestamp(seconds=int(val.timestamp()))
            else:
                val = val.strftime("%Y-%m-%d %H:%M:%S")
        obj_dict[column] = val
    return obj_dict
  1. 把查询的querySet转化为list
def query_set_to_list(querySet, conv=False):
    """
    Serialize SQLAlchemy Query Set to list
    conv: 是否将datetime转换成google.protobuf的Timestamp, true:是,false:否
    """
    ret_list = []
    for obj in querySet:
        ret_dict = query_set_to_dict(obj, conv=conv)
        ret_list.append(ret_dict)
    return ret_list
  1. 把查询的querySet转化为json
    参考:sqlalchemy查询结果转为json并通过restapi接口返回的解决方案
def to_json(obj):
    dict = obj.__dict__
    if "_sa_instance_state" in dict:
        del dict["_sa_instance_state"]
        return dict
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值