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




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