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
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.