Hello,
I have Locality model with 'path' property to get path from 'root' of tree to
current item, everything works ok, but
I can't get result as Locality instance list..
When I use
*'*object_session(self).query(Locality).from_statement(q).order_by(Locality.id)'
I get
sqlalchemy.exc.ArgumentError: from_statement accepts text(), select(), and
union() objects only.
How can I adopt results to Locality model?
class Locality(Base):
__tablename__ = 'localities'
__table_args__ = {'schema': SYSTEM_SCHEMA}
id = Column(Integer, primary_key=True)
parent_id = Column(Integer, ForeignKey(SYSTEM_SCHEMA + '.localities.id'))
name = Column(UnicodeText, nullable=False)
type = Column(Integer, nullable=False)
@property
def path(self):
def get_locality_path_q(locality_id):
top_q = select([
Locality.id,
Locality.parent_id,
Locality.name,
Locality.type,
]).\
where(Locality.id == locality_id).\
cte(recursive=True)
parents = aliased(top_q)
locality_alias = aliased(Locality)
q = top_q.union_all(
select([
locality_alias.id,
locality_alias.parent_id,
locality_alias.name,
locality_alias.type
]).select_from(join(locality_alias, parents, locality_alias.id
== parents.c.parent_id))
)
# return object_session(self).query(q).order_by(q.c.id)
return
object_session(self).query(Locality).from_statement(q).order_by(Locality.id)
return get_locality_path_q(self.id)
--
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.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/78205703-4631-4c1a-aa13-f89fc6f06feb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.