Thanks !
To respond to my needs, it becomes :
class NodeAttribute(Base):
__tablename__ = 'node_attribute'
node_id = Column('n_id', Integer, ForeignKey('node.n_id'),
primary_key=True)
attribute = Column('na_id', String, primary_key=True)
def __init__(self, attribute):
self.attribute = attribute
class Node(Base):
__tablename__ = 'node'
id = Column('n_id', Integer, primary_key=True)
node_attributes = relationship(NodeAttribute,
cascade="all, delete-orphan",
lazy='joined',
collection_class=list)
attributes = AssociationProxy('node_attributes', 'attribute')
On Mar 17, 1:57 am, Michael Bayer <[email protected]> wrote:
> On Mar 16, 2011, at 8:12 PM, zaza witch wrote:
>
> > Hi everyone,
>
> > I am currently in work experience ...
>
> > The first step of my work was to build a small application using
> > sqlalchemy.
>
> > Association proxy seems to allow to simplify many-to-many
> > relationships management.
> > Can i use it to store define a class with an attribute which is a list
> > of string (or integers ...) ?
>
> I recently put up an example of this which deals with lists of dicts of
> integers, it can be adapted to do lists of strings:
>
> http://groups.google.com/group/sqlalchemy/msg/342a8c4d814d520a
>
> > Let me explain:
>
> > With association proxy, i can do something like:
>
> > class Service(Base):
> > __tablename__ = 'service'
> > id = Column('s_id', Integer, primary_key=True)
> > name = Column('s_name', String(63), unique=True)
> > class NodeService(Base):
> > __tablename__ = 'node_service'
> > node_id = Column('n_id', Integer, ForeignKey('node.n_id'),
> > primary_key=True)
> > service_id = Column('s_id', Integer, ForeignKey('service.s_id'),
> > primary_key=True)
> > service = relationship(Service lazy='joined')
> > class Node(Base):
> > __tablename__ = 'node'
> > id = Column('n_id', Integer, primary_key=True)
> > node_services = relationship(NodeService, cascade="all, delete-
> > orphan", lazy='joined')
> > services = AssociationProxy('nodes_services', 'service', lambda
> > service: NodeService(service=service))
> > ...
> > mynode = Node()
> > mynode.services.append(Service("myservice"))
> > # instead of
> > mynode.node_services.append(NodeService(service=Service("myservice")
> > session.add(mynode)
>
> > Is there a way to suppress the Service class in order to handle a list
> > of string (from python point of view) and have something like:
>
> > class NodeAttribute(Base):
> > __tablename__ = 'node_attribute'
> > node_id = Column('n_id', Integer, ForeignKey('node.n_id'),
> > primary_key=True)
> > attribute = Column('na_id', String, primary_key=True)
> > class Node(Base):
> > __tablename__ = 'node'
> > id = Column('n_id', Integer, primary_key=True)
> > node_services = relationship(NodeService, cascade="all, delete-
> > orphan", lazy='joined')
> > node_attributes = relationship(NodeAttribute cascade="all, delete-
> > orphan", lazy='joined')
> > services = AssociationProxy('nodes_services', 'service', lambda
> > service: NodeService(service=service))
> > attributes = AssociationProxyLike('node_attributes', ?, ?)
>
> > mynode = Node()
> > mynode.attributes.append("myattribute")
> > # instead of
> > mynode.node_attributes.append(NodeAttribute("myattribute"))
> > # attributes look like a list of string (with append/del functions)
> > session.add(mynode)
>
> > The second step is to replace sqlalchemy+database by something
> > else ... i will make an other message on the topic
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "sqlalchemy" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected].
> > For more options, visit this group
> > athttp://groups.google.com/group/sqlalchemy?hl=en.
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.