On 03/01/2017 08:27 PM, GMS wrote:
I have the following class models:


|  class DiagnosisDetail(Model):
        __tablename__ = 'vw_svc_diagnosis'
        diagnosis_id = Column(String(32), primary_key=True)
        first_name = Column(String(255))
        last_name = Column(String(255))
        mrn = Column(String(255))
        dx_code = Column(String(255))
        dx_id = Column(String(255), ForeignKey('dx_group.dx_id'))
        diagnosisgroup = relationship("DiagnosisGroup")
        dx_code_type = Column(String(255))
        dx_name = Column(String(255))

        __mapper_args__ = {
             "order_by":[mrn, dx_name]
       }

    class DiagnosisGroup(Model):
        __tablename__ = 'diagnosis_group'
        dx_id = Column(String(32), primary_key=True)
        mrn = Column(String(255))
        dx_code = Column(String(255))
        dx_code_type = Column(String(255))
        dx_name = Column(String(255))
        diagnosis_datetime = Column(DateTime)

        __mapper_args__ = {
             "order_by":[mrn, dx_name]
       }|



where the underlying tables for DiagnosisGroup and DiagnosisDetail are
SQL views. DiagnosisGroup is so that I can have a more succinct view of
the data, since a patient can have the same diagnosis many times. I am
wondering if there is a way to do this within the class structure
 instead of at the db server?

do you mean, derive a DiagnosisGroup object from a DiagnosisDetail without running SQL? (or a list of them?) (the answer is..sure? just build Python code to generate objects from a list of DiagnosisDetail objects).

I do not wish to do this through any ORM
session queries, since these two classes have distinct use cases where
they bind to wtform views. Thus, I would like to inherit the properties
of these two classes from another distinct class.

I have not been able to find anything like this, short
of [create-column-properties-that-use-a-groupby][1]
<http://stackoverflow.com/questions/25822393/how-can-i-create-column-properties-that-use-a-groupby/25879453>,
but this uses session queries to achieve the result. I would like to
keep everything within the class itself through inheritance of the
DiagnosisDetail class.

You don't need a relational database to do grouping, if you have a list of data in memory it can be grouped using sets, or most succinctly Python's own groupby function: https://docs.python.org/2/library/itertools.html#itertools.groupby




Note: the primary key for DiagnosisGroup, is a concatenation of dx_code
and another field patient_id. Groupings thus are unique.

OK, so

    def keyfunc(detail):
        return (detail.dx_code, detail.patient_id)

    def get_diagnosis_groups(sorted_list_of_diagnosis_detail):

for (dx_code, patient_id), details in itertools.groupby(sorted_list_of_diagnosisdetail, keyfunc):
            diagnosis_group = DiagnosisGroup(
               dx_code, patient_id
            )
            diagnosis_group.details = details
            for detail in details:
                detail.group = diagnosis_group
            yield diagnosis_group




I do also need
the FK relation back to the DiagnosisDetail class, which leads me to
believe there should be three classes, where the two above classes
inherit their properties from a parent class.





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

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

Reply via email to