I cannot undestand, why you use @classmethod? среда, 12 декабря 2018 г., 20:33:05 UTC+3 пользователь Mike Bayer написал: > > composites of composites aren't supported directly so you'd have to > map out all the columns for "street" directly, then define a > constructor that handles the columns: > > class Address(object): > def __init__(self, name, value, towndetail): > self.name = name > self.value = value > self.towndetail = towndetail > > @classmethod > def generate(cls, a, b, c, d): > return Address(a, b, TownDetail(c, d)) > > def __composite_values__(self): > return (self.name, self.value) + > self.towndetail.__composite_values__() > > def __eq__(self, other): > return isinstance(other, self.__class__) and\ > make_dump(self) == make_dump(other) > > def __ne__(self, other): > return not self.__eq__(other) > > ... > > class TestComposite(Base): > ... > towndetail = composite(TownDetail, _street_address_town_detail_name, > _street_address_town_detail_value) > street = composite(Address.generate, _street_address_name, > _street_address_value, _street_address_town_detail_name, > _street_address_town_detail_value) > > that trick using "Address.generate" isn't documented right now. I > just discovered it :). Another way would be make Address.__init__ > know how to handle both sets of arguments. > > > On Tue, Dec 11, 2018 at 12:18 AM Tolstov Sergey <whist...@gmail.com > <javascript:>> wrote: > > > > Can someone have example of this? > > Example is > > class TownDetail(object): > > def __init__(self, name, value): > > self.name = name > > self.value = value > > > > def __composite_values__(self): > > return self.name, self.value > > > > def __eq__(self, other): > > return isinstance(other, self.__class__) and\ > > make_dump(self) == make_dump(other) > > > > def __ne__(self, other): > > return not self.__eq__(other) > > > > > > class Address(object): > > def __init__(self, name, value, towndetail): > > self.name = name > > self.value = value > > self.towndetail = towndetail > > > > def __composite_values__(self): > > return self.name, self.value > > > > def __eq__(self, other): > > return isinstance(other, self.__class__) and\ > > make_dump(self) == make_dump(other) > > > > def __ne__(self, other): > > return not self.__eq__(other) > > > > class TestComposite(Base): > > __tablename__ = 'test_composite' > > id = sqlalchemy.Column(sqlalchemy.types.Integer, primary_key=True) > > name = sqlalchemy.Column(sqlalchemy.types.String) > > _street_address_name = sqlalchemy.Column(sqlalchemy.types.String) > > _street_address_value = sqlalchemy.Column(sqlalchemy.types.Integer) > > _street_address_town_detail_name = > sqlalchemy.Column(sqlalchemy.types.String) > > _street_address_town_detail_value = > sqlalchemy.Column(sqlalchemy.types.Integer) > > > > > > towndetail = composite(TownDetail, _street_address_town_detail_name, > _street_address_town_detail_value) > > street = composite(Address, _street_address_name, > _street_address_value, towndetail) > > > > > > test_instance = TestComposite( > > name='tratata!', street=Address(name=22, value='values', > towndetail=TownDetail(322, '322'))) > > > > Error is > > > > sqlalchemy.exc.ArgumentError: Composite expects Column objects or mapped > attributes/attribute names as arguments, got: <CompositeProperty at > 0x7f7aa0a75d68; towndetail> > > > > have some info in here, but cannot undestand what to do. No access to > full example bucket > > > > -- > > SQLAlchemy - > > The Python SQL Toolkit and Object Relational Mapper > > > > http://www.sqlalchemy.org/ > > > > To post example code, please provide an MCVE: Minimal, Complete, and > Verifiable Example. See http://stackoverflow.com/help/mcve for a full > description. > > --- > > 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.com > <javascript:>. > > Visit this group at https://groups.google.com/group/sqlalchemy. > > For more options, visit https://groups.google.com/d/optout. >
-- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- 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 https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.