Hey guys! First off, thank you for the library. Now to the problem, I'm 
currently trying to implement a simple timeseries database using 
`SQLAlchemy`. And so far I've seen the need for the following classes; 
First off is the `Platform` class (which is the highest in the hierarchy)

    import numpy as np
    import pandas as pd
    import datetime
    from sqlalchemy import create_engine, Column, Integer, String, Float, 
ForeignKey, TIMESTAMP
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import sessionmaker, relation, backref

    engine = create_engine('sqlite:///:memory:', echo=False)
    Base = declarative_base()
    Session = sessionmaker(bind=engine)
    session = Session()

    class PlatformORM(Base):
        __tablename__ = 'platforms'
    
        platform_id = Column(Integer, primary_key=True)
        platform_name = Column(String, unique=True)
    
        subfunds = relationship('FundORM', backref='platform')
    
        def __init__(self, platform_name):
            self.platform_name = platform_name
    
        def __repr__(self):
            return "<Platform(name = '%s')>" % self.platform_name


 Next, comes the `FundORM` class, which is linked to the `PlatformORM` 
class. Such that an instance of `PlatformORM` can have several subfunds.

    class FundORM(Base):
        __tablename__ = 'funds'
    
        fund_id = Column(Integer, primary_key=True)
        platform_id = Column(Integer, ForeignKey('platforms.platform_id'))
        fund_name = Column(String, unique=True)

        ts_types = relationship('TimeseriesTypeORM', backref='fund')

        def __init__(self, fund_name):
            self.fund_name = fund_name
    
        def __repr__(self):
            return "<Fund name('%s'), Platform ID('%s')>" % 
(self.fund_name, self.platform_id)

Using only these two classes it's easy to link them. However, I now wish to 
add another class called `TimeseriesTypeORM`, which is linked to `FundORM` 
and describes the different types of timeseries that `FundORM` has - it 
could for example be returns or spot price. This is defined such as

    class TimeseriesTypeORM(Base):
        __tablename__ = 'timeseriestypes'
    
        platform_id = Column(Integer, ForeignKey('platforms.platform_id'))
        fund_id = Column(Integer, ForeignKey('funds.fund_id'))
        ts_type_id = Column(Integer, primary_key=True)
        ts_type_name = Column(String)
    
       timeseries = relationship('TimeseriesORM', backref='ts_type')
    
        def __init__(self, ts_type_name=None):
            self.ts_type_name = ts_type_name
    
        def __repr__(self):
            return "<Type('%s'), Fund ID('%s'), Platform ID('%s')>" % 
(self.ts_type_name, self.fund_id, self.platform_id)

Furthermore, I'd like to create another class called `TimeseriesORM`, which 
is linked to `TimeseriesTypeORM`, containing the actual data of the 
timeseries. The class is defined as 

    class TimeseriesORM(Base):
        __tablename__ = 'timeseries'
    
        platform_id = Column(Integer, ForeignKey('platforms.platform_id'))
        fund_id = Column(Integer, ForeignKey('funds.fund_id'))
        ts_type_id = Column(Integer, 
ForeignKey('timeseriestypes.ts_type_id'))
        ts_id = Column(Integer, primary_key=True)
    
        date = Column(TIMESTAMP)
        value = Column(Float)
    
        def __init__(self, date=None, value=None):
            self.date = date
            self.value = value
    
        def __repr__(self):
            return "<Date('%s'), Fund ID('%s')>" % (self.date, self.fund_id)

As an example, assume that we have a platform called `ABC`, and that `ABC` 
has a fund called `DBE`, where `DBE` in turn has data for spot prices which 
is to be added. Creating the platform, fund and timeseries type then yields

    platform = PlatformORM('ABC')
    fund = FundORM('DBE')
    platform.subfunds += [fund]
    
    ts_type = TimeseriesTypeORM('spot')
    fund.ts_types += [ts_type]
    
    session.add_all([platform, fund, ts_type])
    session.commit()

I can run the above code just fine. However, if I try to view `ts_type`, 
It'll show

    <Type('spot'), Fund ID('1'), Platform ID('None')>,

where `Platform ID` should be 1. However, printing `ts_type.fund` will show 
me the correct platform ID. I really can't figure out where I'm going wrong 
- but a guess is somewhere in the relation for `FundORM`. Do you guys have 
any ideas? It's kinda important to have the `platform_id` and `fund_id` as 
keys in `TimeseriesORM`. Thanks! // Victor

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to