[sqlalchemy] Many to Many and Unique Object question

2013-04-24 Thread dan
I've got a many to many relationship with the association table. The issue 
I am running into is that a given pesticide entry may have a pest or pests 
already in the pest table. I don't want to add the pest since it will be a 
duplicate, however I still want the association of that pest to the 
pesticide done.

I've looked at the Unique Object wiki, however I am not sure that solves my 
issue. Is there a way that SQLAlchemy can handle this, or do I need to 
manually build the entries in the PestToPesticide association table?

Thanks!

Dan

PestToPesticide = Table('pest_to_pesticide', Base.metadata,
  Column('pesticide_id', Integer, 
ForeignKey('pesticide.row_id')),
  Column('pest_id', Integer, 
ForeignKey('pest.row_id'))
  )
class Pesticide(Base):
  __tablename__ = 'pesticide'
  row_id = 
Column(Integer,primary_key=True) 
  name   =  Column(String(64), unique=True) 
 
  pestList  =relationship(Pest, 
secondary=PestToPesticide, backref=pesticide)

class Pest(object):
  row_id = 
Column(Integer,primary_key=True) 
  name   = Column(String(), unique=True) 

-- 
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




Re: [sqlalchemy] Many to Many and Unique Object question

2013-04-24 Thread Michael Bayer
pesttopesticide is maintained by relationship() as the secondary table, but 
the expectation is that rows in this table will be unique.  if you are 
appending duplicate entries to pestList or pesticide you may want to use 
collection_class=set to maintain uniqueness in the collection.


On Apr 24, 2013, at 12:51 PM, dan d...@inlet.geol.sc.edu wrote:

 I've got a many to many relationship with the association table. The issue I 
 am running into is that a given pesticide entry may have a pest or pests 
 already in the pest table. I don't want to add the pest since it will be a 
 duplicate, however I still want the association of that pest to the pesticide 
 done.
 
 I've looked at the Unique Object wiki, however I am not sure that solves my 
 issue. Is there a way that SQLAlchemy can handle this, or do I need to 
 manually build the entries in the PestToPesticide association table?
 
 Thanks!
 
 Dan
 
 PestToPesticide = Table('pest_to_pesticide', Base.metadata,
   Column('pesticide_id', Integer, 
 ForeignKey('pesticide.row_id')),
   Column('pest_id', Integer, 
 ForeignKey('pest.row_id'))
   )
 class Pesticide(Base):
   __tablename__ = 'pesticide'
   row_id = Column(Integer,primary_key=True)   
   
   name   =  Column(String(64), unique=True) 
  
   pestList  =relationship(Pest, secondary=PestToPesticide, 
 backref=pesticide)
 
 class Pest(object):
   row_id = Column(Integer,primary_key=True)   
   
   name   = Column(String(), unique=True) 
 
 
 -- 
 You received this message because you are subscribed to the Google Groups 
 sqlalchemy group.
 To unsubscribe from this group and stop receiving emails from it, send an 
 email to sqlalchemy+unsubscr...@googlegroups.com.
 To post to this group, send email to sqlalchemy@googlegroups.com.
 Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
 For more options, visit https://groups.google.com/groups/opt_out.
  
  

-- 
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




Re: [sqlalchemy] Many to Many and Unique Object question

2013-04-24 Thread dan
Using the collection_class=set is only going to work if I try to add the 
same pest multiple times into pestList isn't it?
My situation is more along the lines that the pest table already has the 
pest, and the pesticide I want to add also will have that pest, so I want 
the entries in the pest_to_pesticide created. What currently happens is an 
IntegrityError is thrown complaining that there is a duplicate pest entry.

On Wednesday, April 24, 2013 1:24:59 PM UTC-4, Michael Bayer wrote:

 pesttopesticide is maintained by relationship() as the secondary table, 
 but the expectation is that rows in this table will be unique.  if you are 
 appending duplicate entries to pestList or pesticide you may want to 
 use collection_class=set to maintain uniqueness in the collection.


 On Apr 24, 2013, at 12:51 PM, dan d...@inlet.geol.sc.edu javascript: 
 wrote:

 I've got a many to many relationship with the association table. The issue 
 I am running into is that a given pesticide entry may have a pest or pests 
 already in the pest table. I don't want to add the pest since it will be a 
 duplicate, however I still want the association of that pest to the 
 pesticide done.

 I've looked at the Unique Object wiki, however I am not sure that solves 
 my issue. Is there a way that SQLAlchemy can handle this, or do I need to 
 manually build the entries in the PestToPesticide association table?

 Thanks!

 Dan

 PestToPesticide = Table('pest_to_pesticide', Base.metadata,
   Column('pesticide_id', Integer, 
 ForeignKey('pesticide.row_id')),
   Column('pest_id', Integer, 
 ForeignKey('pest.row_id'))
   )
 class Pesticide(Base):
   __tablename__ = 'pesticide'
   row_id = 
 Column(Integer,primary_key=True) 
   name   =  Column(String(64), unique=True) 
  
   pestList  =relationship(Pest, 
 secondary=PestToPesticide, backref=pesticide)

 class Pest(object):
   row_id = 
 Column(Integer,primary_key=True) 
   name   = Column(String(), unique=True) 


 -- 
 You received this message because you are subscribed to the Google Groups 
 sqlalchemy group.
 To unsubscribe from this group and stop receiving emails from it, send an 
 email to sqlalchemy+...@googlegroups.com javascript:.
 To post to this group, send email to sqlal...@googlegroups.comjavascript:
 .
 Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
 For more options, visit https://groups.google.com/groups/opt_out.
  
  




-- 
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




Re: [sqlalchemy] Many to Many and Unique Object question

2013-04-24 Thread Michael Bayer

On Apr 24, 2013, at 1:38 PM, dan d...@inlet.geol.sc.edu wrote:

 Using the collection_class=set is only going to work if I try to add the same 
 pest multiple times into pestList isn't it?
 My situation is more along the lines that the pest table already has the 
 pest, and the pesticide I want to add also will have that pest, so I want the 
 entries in the pest_to_pesticide created. What currently happens is an 
 IntegrityError is thrown complaining that there is a duplicate pest entry.


well the issue of the pest_to_pesticide table and the unique entries in Pest 
are two separate things.   since this is many to many, sure any number of Pests 
can be associated with any number of Pesticides, so to achieve this you of 
course need to work with an existing Pest entry and associate it as needed.   
Typically, if you know what Pest you want to work with, you look it up in the 
database, if its not there, you create it.  The UniqueObject recipe is one way 
to make this more invisible but it isn't a requirement.Just to get things 
to work you might want to keep it simple and just do a get_or_create_pest() 
function, before turning it into something more transparent.


 
 On Wednesday, April 24, 2013 1:24:59 PM UTC-4, Michael Bayer wrote:
 pesttopesticide is maintained by relationship() as the secondary table, but 
 the expectation is that rows in this table will be unique.  if you are 
 appending duplicate entries to pestList or pesticide you may want to use 
 collection_class=set to maintain uniqueness in the collection.
 
 
 On Apr 24, 2013, at 12:51 PM, dan d...@inlet.geol.sc.edu wrote:
 
 I've got a many to many relationship with the association table. The issue I 
 am running into is that a given pesticide entry may have a pest or pests 
 already in the pest table. I don't want to add the pest since it will be a 
 duplicate, however I still want the association of that pest to the 
 pesticide done.
 
 I've looked at the Unique Object wiki, however I am not sure that solves my 
 issue. Is there a way that SQLAlchemy can handle this, or do I need to 
 manually build the entries in the PestToPesticide association table?
 
 Thanks!
 
 Dan
 
 PestToPesticide = Table('pest_to_pesticide', Base.metadata,
   Column('pesticide_id', Integer, 
 ForeignKey('pesticide.row_id')),
   Column('pest_id', Integer, 
 ForeignKey('pest.row_id'))
   )
 class Pesticide(Base):
   __tablename__ = 'pesticide'
   row_id = Column(Integer,primary_key=True)  

   name   =  Column(String(64), unique=True) 
  
   pestList  =relationship(Pest, secondary=PestToPesticide, 
 backref=pesticide)
 
 class Pest(object):
   row_id = Column(Integer,primary_key=True)  

   name   = Column(String(), unique=True) 
 
 
 -- 
 You received this message because you are subscribed to the Google Groups 
 sqlalchemy group.
 To unsubscribe from this group and stop receiving emails from it, send an 
 email to sqlalchemy+...@googlegroups.com.
 To post to this group, send email to sqlal...@googlegroups.com.
 Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
 For more options, visit https://groups.google.com/groups/opt_out.
  
  
 
 
 -- 
 You received this message because you are subscribed to the Google Groups 
 sqlalchemy group.
 To unsubscribe from this group and stop receiving emails from it, send an 
 email to sqlalchemy+unsubscr...@googlegroups.com.
 To post to this group, send email to sqlalchemy@googlegroups.com.
 Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
 For more options, visit https://groups.google.com/groups/opt_out.
  
  

-- 
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.




Re: [sqlalchemy] Many to Many and Unique Object question

2013-04-24 Thread dan
Cool, that's what I wanted to know. I didn't want to miss some function 
that did this for me if it was there.

Thanks alot for the help!

Dan

On Wednesday, April 24, 2013 1:42:39 PM UTC-4, Michael Bayer wrote:


 On Apr 24, 2013, at 1:38 PM, dan d...@inlet.geol.sc.edu javascript: 
 wrote:

 Using the collection_class=set is only going to work if I try to add the 
 same pest multiple times into pestList isn't it?
 My situation is more along the lines that the pest table already has the 
 pest, and the pesticide I want to add also will have that pest, so I want 
 the entries in the pest_to_pesticide created. What currently happens is an 
 IntegrityError is thrown complaining that there is a duplicate pest entry.



 well the issue of the pest_to_pesticide table and the unique entries in 
 Pest are two separate things.   since this is many to many, sure any number 
 of Pests can be associated with any number of Pesticides, so to achieve 
 this you of course need to work with an existing Pest entry and associate 
 it as needed.   Typically, if you know what Pest you want to work with, you 
 look it up in the database, if its not there, you create it.  The 
 UniqueObject recipe is one way to make this more invisible but it isn't a 
 requirement.Just to get things to work you might want to keep it simple 
 and just do a get_or_create_pest() function, before turning it into 
 something more transparent.



 On Wednesday, April 24, 2013 1:24:59 PM UTC-4, Michael Bayer wrote:

 pesttopesticide is maintained by relationship() as the secondary table, 
 but the expectation is that rows in this table will be unique.  if you are 
 appending duplicate entries to pestList or pesticide you may want to 
 use collection_class=set to maintain uniqueness in the collection.


 On Apr 24, 2013, at 12:51 PM, dan d...@inlet.geol.sc.edu wrote:

 I've got a many to many relationship with the association table. The 
 issue I am running into is that a given pesticide entry may have a pest or 
 pests already in the pest table. I don't want to add the pest since it will 
 be a duplicate, however I still want the association of that pest to the 
 pesticide done.

 I've looked at the Unique Object wiki, however I am not sure that solves 
 my issue. Is there a way that SQLAlchemy can handle this, or do I need to 
 manually build the entries in the PestToPesticide association table?

 Thanks!

 Dan

 PestToPesticide = Table('pest_to_pesticide', Base.metadata,
   Column('pesticide_id', Integer, 
 ForeignKey('pesticide.row_id')),
   Column('pest_id', Integer, 
 ForeignKey('pest.row_id'))
   )
 class Pesticide(Base):
   __tablename__ = 'pesticide'
   row_id = 
 Column(Integer,primary_key=True) 
   name   =  Column(String(64), unique=True) 
  
   pestList  =relationship(Pest, 
 secondary=PestToPesticide, backref=pesticide)

 class Pest(object):
   row_id = 
 Column(Integer,primary_key=True) 
   name   = Column(String(), unique=True) 


 -- 
 You received this message because you are subscribed to the Google Groups 
 sqlalchemy group.
 To unsubscribe from this group and stop receiving emails from it, send an 
 email to sqlalchemy+...@googlegroups.com.
 To post to this group, send email to sqlal...@googlegroups.com.
 Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
 For more options, visit https://groups.google.com/groups/opt_out.
  
  



 -- 
 You received this message because you are subscribed to the Google Groups 
 sqlalchemy group.
 To unsubscribe from this group and stop receiving emails from it, send an 
 email to sqlalchemy+...@googlegroups.com javascript:.
 To post to this group, send email to sqlal...@googlegroups.comjavascript:
 .
 Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
 For more options, visit https://groups.google.com/groups/opt_out.
  
  




-- 
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.