我一直在尝试找出如何遍历SQLAlchemy模型中定义的列的列表。我想要为一些模型编写一些序列化和复制方法。我不能仅对其进行迭代,obj.__dict__
因为它包含很多SA特定项。
有人知道一种从以下内容中获取id
和desc
名称的方法吗?
class JobStatus(Base):
__tablename__ = 'jobstatus'
id = Column(Integer, primary_key=True)
desc = Column(Unicode(20))
在这种情况下,我可以轻松创建一个:
def logme(self):
return {'id': self.id, 'desc': self.desc}
但我更喜欢自动生成dict
(对于较大的对象)的东西。
您可以使用以下功能:
def __unicode__(self):
return "[%s(%s)]" % (self.__class__.__name__, ', '.join('%s=%s' % (k, self.__dict__[k]) for k in sorted(self.__dict__) if '_sa_' != k[:4]))
它将排除SA 魔术 属性,但不排除关系。因此,基本上它可能会加载依赖项,父项,子项等,这绝对是不可取的。
但这实际上要容易得多,因为如果您继承自Base
,则拥有一个__table__
属性,因此您可以执行以下操作:
for c in JobStatus.__table__.columns:
print c
for c in JobStatus.__table__.foreign_keys:
print c
请参阅如何从SQLAlchemy映射的对象中发现表属性-类似的问题。
迈克(Mike)编辑:
请参见Mapper.c和Mapper.mapped_table之类的函数。如果使用0.8或更高版本,还请参见Mapper.attrs和相关函数。
Mapper.attrs的示例:
from sqlalchemy import inspect
mapper = inspect(JobStatus)
for column in mapper.attrs:
print column.key
问题内容: 当渴望加载子关系时,如何仅加载父模型的几列: 如果我仅需要模型的列,则此方法有效: 但这会引发错误: 查询仅具有基于表达式的实体-找不到名为“章节”的属性。 换句话说,我希望使用ORM语法编写此SQL: 问题答案: 错误消息指出您只是选择,而不是的实例。如果返回的只是字符串列表(用于),该去哪里。 您可以执行以下任一操作: 或者
如何将此迭代器与泛型类型一起使用?以下是我在“main”函数中尝试的方法: 结果是:<代码>无法从静态上下文引用非静态类项 结果是:<代码>无法从静态上下文引用非静态类项 结果: 编辑: 我调用的是类而不是方法。这项工作: 迭代器it=deq。迭代器(); 我认为,由于iterator()中返回的实例的类型是ListIterator,因此我需要使用该类型声明“it”。
问题内容: 对于Java语言有些陌生,我试图使自己熟悉所有可能遍历列表(或其他集合)的方式(或至少是非病理性方式)以及每种方式的优缺点。 给定一个对象,我知道以下遍历所有元素的方式: 基本的for 循环(当然,也有等效的while/ do while循环) 注意:正如@amarseillan指出的那样,这种形式对于在s上进行迭代是一个糟糕的选择,因为该方法的实际实现可能不如使用时有效。例如,实
由于对Java语言有些陌生,我正在尝试熟悉所有可以通过列表(或者其他集合)进行迭代的方法(或者至少是非病态的方法),以及每种方法的优缺点。 给定一个对象,我知道以下循环所有元素的方法: 注意:正如@Amarseillan所指出的,对于迭代s,此表单是一个糟糕的选择,因为方法的实际实现可能不如使用时那样高效。例如,实现必须遍历i之前的所有元素以获得第i个元素。 在上面的示例中,实现没有办法“保留它的
假设我有3个要关闭的Scanner实例。 我可以做 对于每个扫描仪。 或者我可以做类似的事情 使用Java8有没有更简单的方法? 类似的东西?
英文原文:http://emberjs.com/guides/models/defining-models/ 模型是一个定义了需要呈现给用户的数据的属性和行为的类。任何用户往返于应用(或者刷新页面)能看到的内容都需要使用模型来表示。 应用中所有的模型,都继承与DS.Model: 1 App.Person = DS.Model.extend(); 在定义了一个模型类之后,就可以开始查询或者创建一