Yes, I can certainly do that. Sounds pretty simple, actually. I may have more questions as I dive into this.
Thanks! On Mon, Apr 24, 2017 at 3:06 PM, mike bayer <mike...@zzzcomputing.com> wrote: > > > 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/ques >> tions/25822393/how-can-i-create-column-properties-that-use- >> a-groupby/25879453 >> <http://stackoverflow.com/questions/25822393/how-can-i-creat >> e-column-properties-that-use-a-groupby/25879453> >> <http://stackoverflow.com/ques >> tions/25822393/how-can-i-create-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> >> <https://docs.python.org/2/lib >> rary/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_li >> st_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/uns >> ubscribe >> <https://groups.google.com/d/topic/sqlalchemy/t124IuWhNI0/un >> subscribe> >> <https://groups.google.com/d/t >> opic/sqlalchemy/t124IuWhNI0/unsubscribe >> <https://groups.google.com/d/topic/sqlalchemy/t124IuWhNI0/un >> subscribe>>. >> 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 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.