嗨我有一个简单的问题 - 我有2个表(地址和用户 - 用户有一个地址,很多用户可以住在同一地址)...我创建了一个像这样的sqlalchemy映射: 我让我的会话,并尝试查询类似sqlalchemy关系映射
class Person(object):
'''
classdocs
'''
idPerson = Column("idPerson", Integer, primary_key = True)
name = Column("name", String)
surname = Column("surname", String)
idAddress = Column("idAddress", Integer, ForeignKey("pAddress.idAddress"))
idState = Column("idState", Integer, ForeignKey("pState.idState"))
Address = relationship(Address, primaryjoin=idAddress==Address.idAddress)
class Address(object):
'''
Class to represent table address object
'''
idAddress = Column("idAddress", Integer, primary_key=True)
street = Column("street", String)
number = Column("number", Integer)
postcode = Column("postcode", Integer)
country = Column("country", String)
residents = relationship("Person",order_by="desc(Person.surname, Person.name)", primaryjoin="idAddress=Person.idPerson")
self.tablePerson = sqlalchemy.Table("pPerson", self.metadata, autoload=True)
sqlalchemy.orm.mapper(Person, self.tablePerson)
self.tableAddress = sqlalchemy.Table("pAddress", self.metadata, autoload=True)
sqlalchemy.orm.mapper(Address, self.tableAddress)
myaddress = session.query(Address).get(1);
print myaddress.residents[1].name
=>我得到类型错误:“RelationshipProperty”对象不支持索引
我明白居民是有定义的关系,但赫克哪能得到给定地址分配给的居民的名单?! 感谢
以及我有两个类在单独的文件。我有我的数据库初始化对象,它做的ORM self.tableAddress = sqlalchemy.Table(“pAddress”,self.metadata,autoload = True) addressMapper = sqlalchemy.orm.mapper(Address,self.tableAddress) self.tablePerson = sqlalchemy.Table(“pPerson”,self.metadata,autoload = True) personMapper = sqlalchemy.orm.mapper(Person,self.tablePerson) 当我做了你的建议并得到AttributeError:'Address'对象没有属性“居民”。是不是问题autoload = True“声明?我不认为backref被创建 – kosta5
我从来没有用过.Table()...我的理解是,这是如果你连接到ORM外部的表。(正如在你的类中使用Table()或关系,但不能同时使用......)你可能会检查 - http://www.sqlalchemy.org/docs/core/schema.html#binding-metadata-to-an-引擎或连接 –
此外,使用关系()为一个单独的文件中定义的表类是可以的...只要确保您的导入不是循环的,否则在第一次创建表时会引发问题。 –