marshmallow-sqlalchemy

marshmallow-sqlalchemy

https://marshmallow-sqlalchemy.readthedocs.io/en/latest/

https://github.com/marshmallow-code/marshmallow-sqlalchemy

 

SQLAlchemy integration with the marshmallow (de)serialization library.

 

marshmallow

https://marshmallow.readthedocs.io/en/3.0/

https://github.com/marshmallow-code/marshmallow

marshmallow is an ORM/ODM/framework-agnostic library for converting complex datatypes, such as objects, to and from native Python datatypes.

In short, marshmallow schemas can be used to:

  • Validate input data.

  • Deserialize input data to app-level objects.

  • Serialize app-level objects to primitive Python types. The serialized objects can then be rendered to standard formats such as JSON for use in an HTTP API.

 

flask_marshmallow

https://flask-marshmallow.readthedocs.io/en/latest/

Flask + marshmallow for beautiful APIs

Flask-Marshmallow is a thin integration layer for Flask (a Python web framework) and marshmallow (an object serialization/deserialization library) that adds additional features to marshmallow, including URL and Hyperlinks fields for HATEOAS-ready APIs. It also (optionally) integrates with Flask-SQLAlchemy.

 

https://realpython.com/flask-connexion-rest-api-part-2/

https://github.com/realpython/materials/blob/master/flask-connexion-rest-part-2/version_1/models.py

 

 

PLAY CODE

https://github.com/fanqingsong/code_snippet/blob/master/python/sqlalchemy/alchemy_serialize.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema


# 创建对象的基类:
Base = declarative_base()

# 定义User对象:
class User(Base):
    # 表的名字:
    __tablename__ = 'user'

    # 表的结构:
    id = Column(String(20), primary_key=True)
    name = Column(String(20))


class UserSchema(SQLAlchemyAutoSchema):
    class Meta:
        model = User
        load_instance = True

# 初始化数据库连接:
engine = create_engine('sqlite:///test1.db')

# Base.metadata.create_all(engine)


# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)

# # 创建session对象:
# session = DBSession()
# # 创建新User对象:
# new_user = User(id='7', name='Bob')
# # 添加到session:
# session.add(new_user)
# # 提交即保存到数据库:
# session.commit()
# # 关闭session:
# session.close()

# 创建Session:
session = DBSession()
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
user = session.query(User).filter(User.id=='6').one()
# 打印类型和对象的name属性:
print('type:', type(user))
print('name:', user.name)
# 关闭Session:
session.close()

user_schema = UserSchema()
dump_data = user_schema.dump(user)
print(dump_data)


load_data = user_schema.load(dump_data, session=session)
print(load_data)

 

上一篇:听说优秀的程序员20%的时间都在写UT?


下一篇:开题