对于有SQLAlchemy经验的人来说,这肯定是基本的;但是我没有找到有用的文档而且我厌倦了摸不着头脑。
给出两个类:
class User(Base):
__tablename__='users'
id = Column(Integer, primary_key=True)
name = Column(String(32))
...
class UserPost(Base):
__tablename__='posts'
id = Column(Integer, primary_key=True)
poster = Column(Integer, ForeignKey('users.id'))
subject = Column(String(32))
我所追求的是一种方法:
post = session.query(UserPost).filter_by(subject="foo").one()
print post.poster.name
>>> "John Doe"
我尝试使用relation()
属性进行此操作,但我只是围着连接关系的错误继续绕圈,等等:S
我的关系看起来像:
class UserPost(Base):
__tablename__='posts'
id = Column(Integer, primary_key=True)
poster = Column(Integer, ForeignKey('users.id'))
subject = Column(String(32))
poster_user = relation(User, primaryjoin=poster==User.id)
我是SQLAlchemy的伏都教的新手,所以要温柔! :)
先谢谢你们,如果这会变成RTFM或错误的结尾,请提前道歉
答案 0 :(得分:2)
我认为你只是向后关系定义。
尝试:
class User(Base):
__tablename__='users'
id = Column(Integer, primary_key=True)
name = Column(String(32))
posts = relation("UserPost", backref="poster")
class UserPost(Base):
__tablename__='posts'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'))
subject = Column(String(32))
答案 1 :(得分:1)
也许你应该从elixir开始,它为sqlalchemy提供了一个更简单的接口:
from elixir import *
metadata.bind = 'sqlite:///:memory:'
class User(Entity):
name = Field(String(32))
posts = OneToMany('Post')
class Post(Entity):
subject = Field(String(32))
user = ManyToOne('User')
setup_all(True)
u1 = User(name='John Doe')
p1 = Post(subject='foo', user=u1)
session.commit()
print Post.query.filter_by(subject='foo').one().user.name
>>> John Doe
答案 2 :(得分:0)
为什么不显示你如何配置关系()?这可能是那部分不起作用的部分。