1

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

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

因此,我想在一个链接上创建一个 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()

现在根据我的说法,这应该是可能的,我希望有人能帮助我,因为我无能为力。

4

1 回答 1

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”很有用。

于 2010-11-19T12:56:35.390 回答