On Thu, Jul 27, 2017 at 4:43 PM, Mike Bayer <mike...@zzzcomputing.com> wrote:
> On Thu, Jul 27, 2017 at 10:50 AM, Ruben Di Battista
> <rubendibatti...@gmail.com> wrote:
>> Hello, I'm trying to figure out a streamlined way to store some children
>> values that are stored in numpy arrays in Python. As example let's assume I
>> have a parent object that is a sensor that has some readings associated to
>> it:
>>
>> class Sensor(object):
>>     __tablename__ = 'sensor'
>>     id = Column(Integer, primary_key=True),
>>     name = Column(String)
>>     readings = relationship("Reading", backref="sensor")
>>
>>
>> class Reading(object):
>>     __tablename__ = 'reading'
>>     id = Column(Integer, primary_key=True),
>>     date = Column(DateTime),
>>     voltage = Column(Float),
>>     value = Column(Float),
>>
>>     sensor_id = Column(Integer, ForeignKey('sensor.id'))
>>
>>
>> What I would like to achieve is something like:
>> sensor = Sensor(name='Bedroom Sensor')
>> dates, voltages, values = get_sensor_data_from_somewhere()  #<-- This
>> returns three numpy arrays respectively of datetime, float, float types,
>> same len!
>>
>> sensor.readings['date'] = dates
>> sensor.readings['voltage'] = voltages
>> sensor.values['value'] = values

oh, .readings.  Unfortunately you'd need to develop a custom
collection class which achieves this and make it available by a
@property on Sensor:

class Sensor(...):
    @property
    def readings(self):
        return MagicReadingCollection(self)

then you do the __getitem__ / __setitem__ thing on MagicReadingCollection:

class MagicReadingCollection(object):
    def __init__(self, sensor):
        self.sensor = sensor

    def __setitem__(self, field, values):
        start_appending_at = len(self.sensor.readings)
        for index, value in enumerate(values):
            if index > start_appending_at:
                reading = Reading()
                self.sensor.readings.append(reading)
           else:
                reading = self.sensor.readings[index]
           setattr(reading, field, value)






>>
>> session.add(sensor)
>>
>> Is this possible somehow? It's similar to the attribute_mapped_collection,
>> but I need to map three different keys to the three attributes of the
>> Reading object.
>
> Application of appropriate  __getitem__() and __setitem__() methods on
> your Sensor class would achieve this.
>
>
>>
>> --
>> 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.

-- 
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.

Reply via email to