I've tried using it but I failed. I made my model classes inherit ComparableEntity. Unfortunately comparison of persistent object with the non-persistent fails, as the former has unicode string while the latter does not. How can I fix it?
Marcin On Monday, February 24, 2014 1:13:49 PM UTC+1, Simon King wrote: > > On Mon, Feb 24, 2014 at 11:59 AM, <[email protected] <javascript:>> > wrote: > > Hi > > > > Is there a way to compare mapped objects by values and not by identity? > I > > want to create an instance of some mapped class, set its attributes > > (including relationship one to many) to some values and then ask > SQLAlchemy > > to check if there is such object in database. > > > > Let me explain wider context of what I am trying to do. I am writing > > component test for my application. The test should create a set of data, > > save the data in .csv file, make application read the file and then > verify > > that proper records were inserted into database. So I was going to use > > classes that are mapped to database as my model, create some objects, > set > > their attributes, create .csv file based on these objects and then use > the > > objects to check if data was properly stored in database. > > > > A more precise example. Let's assume we have two classes: > > > > class User(Base): > > __tablename__ = 'users' > > > > id = Column(Integer, primary_key=True) > > name = Column(String) > > fullname = Column(String) > > password = Column(String) > > addresses = relationship("Address", order_by="Address.id", > > backref="user") > > > > class Address(Base): > > __tablename__ = 'addresses' > > > > id = Column(Integer, primary_key=True) > > email_address = Column(String, nullable=False) > > user_id = Column(Integer, ForeignKey('users.id')) > > > > I want to create instance of User, set its name, fullname, password and > add > > a few addresses. Now I want to query database for object with exactly > the > > same properties including same addresses. How can I do it? Is it > possible to > > avoid explicit comparisons of each field? > > > > Regards > > Marcin > > > > The SQLAlchemy unit tests use a mixin class called ComparableEntity > which would allow you to compare an object you've just constructed > with one you've loaded from the database: > > > https://bitbucket.org/zzzeek/sqlalchemy/src/8b58c6adc2f000f6ce69e8107d10af3ee6e304ba/lib/sqlalchemy/testing/entities.py?at=master#cl-35 > > > However, it would require you to load the object that you want to > compare against from the database. This is more complicated given that > you want to compare related objects as well, but perhaps it would be > fine if you were to query the "primary" object (eg. User in your > example above) and then allow SA to load the associated Addresses > automatically. > > Hope that helps, > > Simon > -- 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/groups/opt_out.
