use*_*850 5 python sqlalchemy bottle
我正在使用:SQLAlchemy 0.7.9和Python 2.7.3 with Bottle 0.11.4.我是python的业余爱好者.
我有一个类(有很多列)派生自声明式基类,如下所示:
class Base(object):
@declared_attr
def __tablename__(cls):
return cls.__name__.lower()
id = Column(Integer, primary_key = True)
def to_dict(self):
serialized = dict((column_name, getattr(self, column_name))
for column_name in self.__table__.c.keys())
return serialized
Base = declarative_base(cls=Base)
class Case(Base):
version = Column(Integer)
title = Column(String(32))
plausible_dd = Column(Text)
frame = Column(Text)
primary_task = Column(Text)
secondary_task = Column(Text)
eval_objectives = Column(Text)
...
Run Code Online (Sandbox Code Playgroud)
我目前正在使用Bottle中的'route'来转储json中的行/类,如下所示:
@app.route('/<name>/:record')
def default(name, record, db):
myClass = getattr(sys.modules[__name__], name)
parms = db.query(myClass).filter(myClass.id == record)
result = json.dumps(([parm.to_dict() for parm in parms]))
return result
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是:我怎样才能让每个列都有一些静态文本,我可以将其用作正确的名称,以便我可以迭代列并获取它们的值和专有名称?例如:
class Case(Base):
version = Column(Integer)
version.pn = "Version Number"
Run Code Online (Sandbox Code Playgroud)
我的第二个问题是:以下是否符合我的要求?我已经看过这个例子,但我不明白这个解释.
id = Column("some_table_id", Integer)
Run Code Online (Sandbox Code Playgroud)
我对这个例子的解释:
version = Column("Version Number", Integer)
Run Code Online (Sandbox Code Playgroud)
显然我不希望创建表列.我只是希望列具有一般意义上的"属性".先感谢您.
信息字典可以用于此目的。在您的模型类中定义如下:
class Case(Base):
version = Column(Integer, info={'description': 'Version Number'})
Run Code Online (Sandbox Code Playgroud)
然后它可以作为表列属性进行访问:
desc = Case.__table__.c.version.info.get('description', '<no description>')
Run Code Online (Sandbox Code Playgroud)
更新
这是迭代表中所有列并获取它们的名称、值和描述的一种方法。此示例使用自 Python 2.7 起可用的字典理解。
class Case(Base):
# Column definitions go here...
def as_dict(self):
return {c.name: (getattr(self, c.name), c.info.get('description'))
for c in self.__table__.c}
Run Code Online (Sandbox Code Playgroud)