python-sqlalchemy关系映射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-sqlalchemy关系映射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1962字,纯文字阅读大概需要3分钟。
内容图文
![python-sqlalchemy关系映射](/upload/InfoBanner/zyjiaocheng/881/83bea33f124c4223a3a284a3e1455daf.jpg)
嗨,我有一个简单的问题-我有2个表(地址和用户-用户有一个地址,很多用户可以住在同一地址)…我创建了一个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
=>我收到TypeError:“ RelationshipProperty”对象不支持索引
我知道居民在那里可以定义关系,但是我怎么能得到给定地址分配给的居民列表?
谢谢
解决方法:
您在错误的位置定义了关系.我认为您将Declarative Extension与非声明性用法混合使用:
>使用声明式时,您可以在模型中定义关系.
>否则,在将模型映射到表时定义它们
如果正在执行option-2,则需要从模型中删除两个关系定义,然后将其添加到映射器中(只有一个足够):
mapper(Address, tableAddress,
properties={'residents': relationship(Person, order_by=(desc(Person.name), desc(Person.surname)), backref="Address"),}
)
关于上述代码的其他事情:
>关系仅在一侧定义. backref负责另一侧.
>您无需指定primaryjoin(只要指定了ForeignKey,并且SA能够推断列)
>您的order_by配置不正确,请参见上面的代码以了解可用的版本.
内容总结
以上是互联网集市为您收集整理的python-sqlalchemy关系映射全部内容,希望文章能够帮你解决python-sqlalchemy关系映射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。