美好的一天!
我正在学习Pylons web框架来为我的数据库创建Web UI。 目前我正在探索宣布我的模型的方法。最性感的方式似乎是用反思声明。 我可以和Pylons一起使用吗? (因为model / init .py声明我需要在init_model中定义与反射相关的人员)
谢谢!
答案 0 :(得分:2)
有关Pylons 1.0中的最新答案,请参阅SQLAlchemy declarative syntax with autoload (reflection) in Pylons:
解决方案是在
model/__init__.py
之外声明模型对象。我在model
模块中创建了一个新文件,例如objects.py
。然后我在此文件中声明了所有模型对象(如Event
)。然后,我可以像这样导入我的模型:
from PRJ.model.objects import Event
此外,为避免为每个表格指定
autoload-with
,我在init_model()
末尾添加了这一行:
Base.metadata.bind = engine
这样我可以声明我的模型对象没有样板代码,如下所示:
class Event(Base):
__tablename__ = 'events'
__table_args__ = {'schema': 'events', 'autoload': True}
event_identifiers = relationship(EventIdentifier)
def __repr__(self):
return "<Event(%s)>" % self.id
答案 1 :(得分:0)
您使用的是Pylons 0.9.7版吗? Pylons allrady稳定在1.0版本。
您可以在init_model函数之外的model / init .py中使用带有反射的声明。或者,您可以在任何其他模块或包中分离模型定义。
模型/ schema.py
from YOURAPP.model.meta import Base # for declaration you models and reflection
from YOURAPP.model.meta import Session # for using sa session object
class Category(Base):
__tablename__ = 'category'
id = Column(Integer, primary_key=True)
name = Column(Unicode(70), index=True, unique=True)
def __unicode__(self):
return self.name
class Attribute(Base):
__tablename__ = 'attribute'
id = Column(Integer, primary_key=True)
name = Column(Unicode(70), index=True)
#Relation
category_id = Column(Integer, ForeignKey('category.id'))
category = relation(Category, backref=backref('attributes',
order_by=(name,))
def __unicode__(self):
return self.name
在model / init .py
中from YOURAPP.model.schema import Category, Attribute