Pylons + SQLA:一对一的关系

时间:2010-11-15 19:32:45

标签: sqlalchemy pylons relation

新手问题。 Pylons 1 + SQLA使用声明式样式。 Python新手。

我有一个名为Entity的“master”类,“child”类必须属于它们才有效。我对主类的链接是在子对象级别上。我的问题是我似乎无法弄清楚如何创建子对象并创建主对象以及创建对象之间的链接。我利用关系进行链接。

因此,我想在一个链接上创建一个ono,如下所示: 实体1 - 客户1 实体2 - 客户2 实体3 - 制片人1 实体4 - 制片人2 等

代码可能会更好地解释。

class Entity(Base):
    __tablename__ = "entities"
    # Primary Key
    entity_id = Column(Integer, primary_key=True)
    # Data Fields
    name =  Column(Unicode(255), nullable=False)
    def __init__(self, name, description):
        self.name = name
    def __unicode__(self):
        return self.name
    __str__ = __unicode__

class Client(Base):
    __tablename__ = "clients"
    client_id = Column(Integer, primary_key=True)
    # Data fields
    name = Column(UnicodeText(255), nullable=False, unique=True)
    # Entity Link
    entity_id = Column(Integer, ForeignKey('entities.entity_id'))
    # Mapper
    entity = relation('Entity')
    def __init__(self, name):
        self.name = name
    def __unicode__(self):
        return self.name
    __str__ = __unicode__

在控制器中,我尝试创建一个新客户端并将其附加一个实体,该实体失败了。请在下面编写代码。

            client_entity = model.Entity(name=client_name, description=client_name + " added")
            client = model.Client(name=client_name)
            client.entity.append(client_entity)
            Session.add(client)
            Session.commit()

现在根据我这应该是可能的,我希望有人可以帮助,因为我在我的智慧结束。

1 个答案:

答案 0 :(得分:0)

这有意义吗?

class Entity(Base):
    __tablename__ = "entities"
    # Primary Key
    entity_id   = Column(Integer, primary_key=True)
    # Data Fields
    name        =  Column(Unicode(255), nullable=False)

    def __init__(self, name, description):
        self.name           = name

    def __unicode__(self):
        return self.name
    __str__ = __unicode__

class Client(Base):
    __tablename__ = "clients"
    client_id   = Column(Integer, primary_key=True)
    name        = Column(UnicodeText())
    entity_id   = Column(Integer, ForeignKey('entities.entity_id'))
    # Mapper
    entity = relation('Entity', uselist=False, backref='clients')

    def __init__(self, name):
        self.name = name

    def __unicode__(self):
        return self.name
    __str__ = __unicode__



client_name="ClientName"
entitiy_name="EntityName"

client = Client(name=client_name)
client.entity=Entity(name=entitiy_name, description=entitiy_name + " added")

如果您使用OneToOne,我认为"uselist=False"非常有用。