Hello,
I try to rewrite "meters_readings[generate_subscripts(meters_readings, 1)][1]" from plain sql query that works
with sqlalchemy and Database.meters_readings[func.generate_subscripts(Database.meters_readings, 1)][1] doesn't work
I get NotImplementedError: Operator 'getitem' is not supported on this expression
Is it possible?
def get_person_meters_q(dbsession, person_id):
database = dbsession.query(
Database.person_id,
Database.service_id,
Database.person_id_internal,
Database.meters_readings,
(Database.meters_readings[func.generate_subscripts(Database.meters_readings, 1)][1]).label('meter_id'),
(Database.meters_readings[func.generate_subscripts(Database.meters_readings, 1)][2]).label('organization_reading'),
Database.date
).subquery()
meter_readings = dbsession.query(
MeterReading.user_id,
MeterReading.reading
). \
distinct(
MeterReading.service_id,
MeterReading.person_id_internal,
MeterReading.meter_id). \
filter(
and_(
MeterReading.person_id == database.c.person_id,
MeterReading.service_id == database.c.service_id,
MeterReading.meter_id == database.c.meter_id,
MeterReading.commit_date > database.c.date,
MeterReading.rollback_date == None,
MeterReading.reading != None
)
). \
order_by(
MeterReading.service_id,
MeterReading.person_id_internal,
MeterReading.meter_id,
MeterReading.commit_date.desc(),
MeterReading.commit_time.desc()
).subquery().lateral()
q = dbsession.query(
meter_readings,
database
). \
select_from(database). \
outerjoin(meter_readings, true()). \
filter(Database.person_id == person_id)
return q
File "/home/sector119/PycharmProjects/epsilon/epsilon/scripts/testdb.py", line 98, in get_person_meters_q
(Database.meters_readings[func.generate_subscripts(Database.meters_readings, 1)][1]).label('meter_id'),
File "/home/sector119/PythonVirtualEnv/epsilon/lib/python3.5/site-packages/sqlalchemy/sql/operators.py", line 411, in __getitem__
return self.operate(getitem, index)
File "/home/sector119/PythonVirtualEnv/epsilon/lib/python3.5/site-packages/sqlalchemy/sql/elements.py", line 692, in operate
return op(self.comparator, *other, **kwargs)
File "/home/sector119/PythonVirtualEnv/epsilon/lib/python3.5/site-packages/sqlalchemy/sql/operators.py", line 411, in __getitem__
return self.operate(getitem, index)
File "<string>", line 1, in <lambda>
File "/home/sector119/PythonVirtualEnv/epsilon/lib/python3.5/site-packages/sqlalchemy/sql/type_api.py", line 63, in operate
return o[0](self.expr, op, *(other + o[1:]), **kwargs)
File "/home/sector119/PythonVirtualEnv/epsilon/lib/python3.5/site-packages/sqlalchemy/sql/default_comparator.py", line 192, in _getitem_impl
_unsupported_impl(expr, op, other, **kw)
File "/home/sector119/PythonVirtualEnv/epsilon/lib/python3.5/site-packages/sqlalchemy/sql/default_comparator.py", line 197, in _unsupported_impl
"this expression" % op.__name__)
NotImplementedError: Operator 'getitem' is not supported on this expression