参考:SQLAlchemy将查询结果对象转为dict/list
- 连接数据库
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()
- 创建模型
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)
- 把查询的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
- 把查询的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
- 把查询的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