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 itertools as itertools for (dx_code, patient_id), details in itertools.groupby(self, keyfunc): diagnosis_group = DiagnosisGroup( dx_code, patient_id ) diagnosis_group.details = details for detail in 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. 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> 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>> 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-creat >> e-column-properties-that-use-a-groupby/25879453 >> <http://stackoverflow.com/questions/25822393/how-can-i-creat >> e-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 a topic in the > Google Groups "sqlalchemy" group. > To unsubscribe from this topic, visit https://groups.google.com/d/to > pic/sqlalchemy/t124IuWhNI0/unsubscribe. > To unsubscribe from this group and all its topics, 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. > -- Greg M. Silverman › flora-script <http://flora-script.grenzi.org/> ‹ › 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. 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.