On 04/24/2017 03:42 PM, Greg Silverman wrote:
My naive first response would be that I want the class to look like

class DiagnosisTest(Model):
__tablename__= 'vw_svc_diagnosis'
#id = Column(Integer, primary_key=True, autoincrement=True)
dx_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_code_orig = Column(String(255))
dx_code_type= Column(String(255))
     dx_name= Column(String(255))
     #chronic_diagnosis_yn = Column(String(255))
diagnosis_datetime= Column(DateTime)



     @property
def get_diagnosis_groups(self):

import itertoolsas itertools

         for (dx_code, patient_id), detailsin itertools.groupby(self, keyfunc):
diagnosis_group  = DiagnosisGroup(
                 dx_code, patient_id
             )
             diagnosis_group.details= details
             for detailin details:
detail.group= diagnosis_group
             yield diagnosis_group


So that I could then instantiate this and access grouped elements like DiagnosisTest.get_diagnosis_groups.patient_id and DiagnosisTest.get_diagnosis_groups.dx_code for example.


OK can you add a relationship() to DiagnosisTest that returns a list of DiagnosisDetail objects? that would be all you need here.




I am sure this does not answer your question, but what I really want to do is have the data grouped within the class and available whenever I instantiate the class.

I know what I need, but I am having problems in articulating the details.

Thanks for being patient with me! ^_^


On Mon, Apr 24, 2017 at 12:21 PM, mike bayer <mike...@zzzcomputing.com <mailto:mike...@zzzcomputing.com>> wrote:



    On 04/24/2017 12:51 PM, Greg Silverman wrote:

        Hi Mike,
        I'm finally getting to this.  Instead of having both a detail
        and grouped methods, I would like to have only the grouped
        method. I'm not sure I follow your suggestion for the two
        methods above and how that would be modified to fit into the
        @property in my class.

        Could you please elaborate a bit how these would work within
        context of the class?


    cutting and pasting:


       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


    you want to take out the "sorted_list_of_diagnosis_detail" argument.
    OK....but I don't know where you'd like to get this from.  Where is
    this "method" going and are you calling that as a classmethod or an
    instance method?  what class?   Just show a usage example.







        Thanks!

        Greg--




        On Wed, Mar 1, 2017 at 8:53 PM, mike bayer
        <mike...@zzzcomputing.com <mailto:mike...@zzzcomputing.com>
        <mailto:mike...@zzzcomputing.com
        <mailto:mike...@zzzcomputing.com>>> wrote:



             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
        
<http://stackoverflow.com/questions/25822393/how-can-i-create-column-properties-that-use-a-groupby/25879453>
<http://stackoverflow.com/questions/25822393/how-can-i-create-column-properties-that-use-a-groupby/25879453
        
<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
        <https://docs.python.org/2/library/itertools.html#itertools.groupby>
<https://docs.python.org/2/library/itertools.html#itertools.groupby
        <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
        <http://stackoverflow.com/help/mcve>
                 <http://stackoverflow.com/help/mcve
        <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%2bunsubscr...@googlegroups.com>
                 <mailto:sqlalchemy%2bunsubscr...@googlegroups.com
        <mailto:sqlalchemy%252bunsubscr...@googlegroups.com>>
                 <mailto:sqlalchemy+unsubscr...@googlegroups.com
        <mailto:sqlalchemy%2bunsubscr...@googlegroups.com>
                 <mailto:sqlalchemy%2bunsubscr...@googlegroups.com
        <mailto:sqlalchemy%252bunsubscr...@googlegroups.com>>>.
                 To post to this group, send email to
        sqlalchemy@googlegroups.com <mailto:sqlalchemy@googlegroups.com>
                 <mailto:sqlalchemy@googlegroups.com
        <mailto:sqlalchemy@googlegroups.com>>
                 <mailto:sqlalchemy@googlegroups.com
        <mailto:sqlalchemy@googlegroups.com>
                 <mailto:sqlalchemy@googlegroups.com
        <mailto:sqlalchemy@googlegroups.com>>>.
                 Visit this group at
        https://groups.google.com/group/sqlalchemy
        <https://groups.google.com/group/sqlalchemy>
                 <https://groups.google.com/group/sqlalchemy
        <https://groups.google.com/group/sqlalchemy>>.
                 For more options, visit
        https://groups.google.com/d/optout
        <https://groups.google.com/d/optout>
                 <https://groups.google.com/d/optout
        <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
        <http://stackoverflow.com/help/mcve>
             <http://stackoverflow.com/help/mcve
        <http://stackoverflow.com/help/mcve>> for a full description.
             --- You received this message because you are subscribed to
        a topic
             in the Google Groups "sqlalchemy" group.
             To unsubscribe from this topic, visit
        https://groups.google.com/d/topic/sqlalchemy/t124IuWhNI0/unsubscribe
        <https://groups.google.com/d/topic/sqlalchemy/t124IuWhNI0/unsubscribe>
<https://groups.google.com/d/topic/sqlalchemy/t124IuWhNI0/unsubscribe
        <https://groups.google.com/d/topic/sqlalchemy/t124IuWhNI0/unsubscribe>>.
             To unsubscribe from this group and all its topics, send an
        email to
        sqlalchemy+unsubscr...@googlegroups.com
        <mailto:sqlalchemy%2bunsubscr...@googlegroups.com>
             <mailto:sqlalchemy%2bunsubscr...@googlegroups.com
        <mailto:sqlalchemy%252bunsubscr...@googlegroups.com>>.
             To post to this group, send email to
        sqlalchemy@googlegroups.com <mailto:sqlalchemy@googlegroups.com>
             <mailto:sqlalchemy@googlegroups.com
        <mailto:sqlalchemy@googlegroups.com>>.
             Visit this group at
        https://groups.google.com/group/sqlalchemy
        <https://groups.google.com/group/sqlalchemy>
             <https://groups.google.com/group/sqlalchemy
        <https://groups.google.com/group/sqlalchemy>>.
             For more options, visit https://groups.google.com/d/optout
        <https://groups.google.com/d/optout>
             <https://groups.google.com/d/optout
        <https://groups.google.com/d/optout>>.




-- Greg M. Silverman

           › flora-script <http://flora-script.grenzi.org/
        <http://flora-script.grenzi.org/>> ‹
        **› grenzi.org <http://grenzi.org> <http://grenzi.org/> ›

-- 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
        <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%2bunsubscr...@googlegroups.com>
        <mailto:sqlalchemy+unsubscr...@googlegroups.com
        <mailto:sqlalchemy%2bunsubscr...@googlegroups.com>>.
        To post to this group, send email to sqlalchemy@googlegroups.com
        <mailto:sqlalchemy@googlegroups.com>
        <mailto:sqlalchemy@googlegroups.com
        <mailto:sqlalchemy@googlegroups.com>>.
        Visit this group at https://groups.google.com/group/sqlalchemy
        <https://groups.google.com/group/sqlalchemy>.
        For more options, visit https://groups.google.com/d/optout
        <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
    <http://stackoverflow.com/help/mcve> for a full description.
    --- You received this message because you are subscribed to a topic
    in the Google Groups "sqlalchemy" group.
    To unsubscribe from this topic, visit
    https://groups.google.com/d/topic/sqlalchemy/t124IuWhNI0/unsubscribe
    <https://groups.google.com/d/topic/sqlalchemy/t124IuWhNI0/unsubscribe>.
    To unsubscribe from this group and all its topics, send an email to
    sqlalchemy+unsubscr...@googlegroups.com
    <mailto:sqlalchemy%2bunsubscr...@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
    <https://groups.google.com/group/sqlalchemy>.
    For more options, visit https://groups.google.com/d/optout
    <https://groups.google.com/d/optout>.




--
Greg M. Silverman

  › flora-script <http://flora-script.grenzi.org/> ‹
**› grenzi.org <http://grenzi.org/> ›

--
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