【发布时间】:2018-08-08 17:28:49
【问题描述】:
我正在尝试使用 sqlalchemy 定义一个模型,这样我只需要在内存中进行处理的列之一,我没有相应的数据库列。我需要这样,当我保存内存对象时,它不应该尝试保留该特殊列。
更多上下文:我正在使用 python marshmallow 库将 json 对象映射到 sql alchemy 对象。在 json 响应中,我有额外的字段,我在数据库中不需要,但在内存中需要用于计算。
我搜索了 sqlalchemy 文档,但找不到跳过某些列的持久性的方法。
class AdSchema(Schema):
"""Schema Mapping class."""
id = fields.Int(dump_only=True)
available_formats = fields.List(fields.Str())
@post_load
def make_ad(self, data):
return AdModel(**data)
class AdModel(Base):
"""Ad ORM class."""
__tablename__ = 'ad_model'
id = Column(Integer, primary_key=True)
我错过了什么吗?
我实际上在寻找的是一个“虚拟”属性,类似于 Rails ORM How to add a virtual attribute to a model in Ruby on Rails? 中可用的属性@
【问题讨论】:
-
stackoverflow.com/help/mcve 请添加相关的模型/表格定义以及您尝试过的内容
-
你不能只使用一个普通的旧属性吗?
-
这就是我尝试过的,但是当我定义
__init__方法时,sqlalchemy 不喜欢它。 -
不喜欢怎么办?一般来说 SQLAlchemy 并不关心
__init__: "Mapping imposes no restrictions or requirements on the constructor (__init__) method for the class."
标签: python sqlalchemy marshmallow