se1983 / Bachelorarbeit

ArgoData
0 stars 0 forks source link

SQLAlchemy-queries gehen in die binds #6

Closed se1983 closed 6 years ago

se1983 commented 6 years ago

Werden Anfragen über die query language von SQLAlchemy gestellt, so werden die Daten hierfür aus der gebindeten Datenbank geholt und nicht aus der Präferierten

In [12]: db
Out[12]: <SQLAlchemy engine=postgresql://_s0543196__argo_data_generic:***@db.f4.htw-berlin.de/_s0543196__argo_data>

In [14]: db.get_binds()
Out[14]: 
{Table('argo_floats', MetaData(bind=None), Column('id', Integer(), table=<argo_floats>, primary_key=True, nullable=False), Column('identifier', String(length=10), table=<argo_floats>), schema=None): Engine(postgresql://argo_user:***@dione.geblubber.org/argo_temp_db),
 Table('locations', MetaData(bind=None), Column('id', Integer(), table=<locations>, primary_key=True, nullable=False), Column('longitude', Float(), table=<locations>), Column('latitude', Float(), table=<locations>), schema=None): Engine(postgresql://argo_user:***@dione.geblubber.org/argo_temp_db),
 Table('measurements', MetaData(bind=None), Column('id', Integer(), table=<measurements>, primary_key=True, nullable=False), Column('argo_float_id', Integer(), ForeignKey('argo_floats.id'), table=<measurements>), Column('location_id', Integer(), ForeignKey('locations.id'), table=<measurements>), schema=None): Engine(postgresql://argo_user:***@dione.geblubber.org/argo_temp_db),
 Table('profiles', MetaData(bind=None), Column('id', Integer(), table=<profiles>, primary_key=True, nullable=False), Column('cycle', Integer(), table=<profiles>), Column('timestamp', Date(), table=<profiles>), Column('measurement_id', Integer(), ForeignKey('measurements.id'), table=<profiles>), Column('salinity', Float(), table=<profiles>), Column('pressure', Float(), table=<profiles>), Column('conductivity', Float(), table=<profiles>), Column('temperature', Float(), table=<profiles>), schema=None): Engine(postgresql://argo_user:***@dione.geblubber.org/argo_temp_db)}
se1983 commented 6 years ago

Der trick war db.session.execute(q, None, bind=db.get_engine(app, None)). Dadurch kann explizit angegeben werden, dass der Query in einer spezifischen Datenbank ausgeführt werden soll. Durch einfache iteration über das Query objekt war dies nicht möglich.