python – SQLAlchemy声明:向列添加静态文本属性

前端之家收集整理的这篇文章主要介绍了python – SQLAlchemy声明:向列添加静态文本属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用:sqlAlchemy 0.7.9和Python 2.7.3 with Bottle 0.11.4.我是python的业余爱好者.

我有一个类(有很多列)派生自声明式基类,如下所示:

  1. class Base(object):
  2. @declared_attr
  3. def __tablename__(cls):
  4. return cls.__name__.lower()
  5. id = Column(Integer,primary_key = True)
  6. def to_dict(self):
  7. serialized = dict((column_name,getattr(self,column_name))
  8. for column_name in self.__table__.c.keys())
  9. return serialized
  10. Base = declarative_base(cls=Base)
  11. class Case(Base):
  12. version = Column(Integer)
  13. title = Column(String(32))
  14. plausible_dd = Column(Text)
  15. frame = Column(Text)
  16. primary_task = Column(Text)
  17. secondary_task = Column(Text)
  18. eval_objectives = Column(Text)
  19. ...

我目前正在使用Bottle中的’route’来转储json中的行/类,如下所示:

  1. @app.route('/

我的第一个问题是:我怎样才能让每个列都有一些静态文本,我可以将其用作正确的名称,以便我可以迭代列并获取它们的值和专有名称?例如:

  1. class Case(Base):
  2. version = Column(Integer)
  3. version.pn = "Version Number"

我的第二个问题是:以下是否符合我的要求?我已经看过这个例子,但我不明白这个解释.

sqlalchemy.org的示例:

  1. id = Column("some_table_id",Integer)

我对这个例子的解释:

  1. version = Column("Version Number",Integer)

显然我不希望创建表列.我只是希望列具有一般意义上的“属性”.先感谢您.

最佳答案
可以使用info字典.在您的模型类中,像这样定义它:

  1. class Case(Base):
  2. version = Column(Integer,info={'description': 'Version Number'})

然后它可以作为表列属性访问:

  1. desc = Case.__table__.c.version.info.get('description','

更新

这是迭代表中所有列并获取名称,值和描述的一种方法.这个例子使用了dict理解,它可以从Python 2.7开始使用.

  1. class Case(Base):
  2. # Column definitions go here...
  3. def as_dict(self):
  4. return {c.name: (getattr(self,c.name),c.info.get('description'))
  5. for c in self.__table__.c}

猜你在找的Python相关文章