Sqlalchemy - 外国价值

时间:2014-08-26 14:07:52

标签: python serialization sqlalchemy flask-sqlalchemy

我正在寻找一种方法来执行以下操作。

class Foo(db.Model):
    __tablename__ = 'foos_foo'
    id = db.Column(db.Integer, primary_key=True)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    # Not an entity in the table but
    # whenever foo.author_name is called,
    # it selects the value from User table
    author_name = author.name

我正在寻找办法的原因是:

class Foo(db.Model, Serializable):

我创建了一个Serializable mixin,以便foo.serialize只返回json中的行值。

我希望author.name成为此序列化的一部分。当然,有无数其他方法可以获取作者的名称并将其插入到序列化输出中,但为了清洁代码的好处,我希望找到一种方法在模型中包含外来值。

我使用不恰当的“外键”,因为我不知道最合适的关键字是什么。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

我最终使用Marshmallow进行对象序列化。

http://marshmallow.readthedocs.org/en/latest/index.html

这些是实施。

model.py

class User(db.Model):
    name = db.Column()

class UserSerializer(Serializer):
    class Meta:
        fields = ('id', 'name')

class FooSerializer(Serializer):
    author_name = fields.Nested('UserSerializer')

    class Meta:
        fields = ('id', 'author_name')

view.py

foos = Foo.query.all()
dict = FooSerializer(foos, many=True).data

答案 1 :(得分:0)

对象不能序列化。 我认为你需要实现一个转换为JSON的方法。 json.dumps适用于dicts。所以你也可以看看。 http://www.marcstober.com/blog/2007/07/07/serializing-arbitrary-python-objects-to-json-using-dict/

您也可以实现自己的方法to_json。