This worked, btw. 

Thanks!


On Wednesday, June 1, 2016 at 5:45:45 PM UTC-5, Horcle wrote:
>
> Ha! Yes, I should not have taken this literally. Will try tomorrow and let 
> you know the outcome.
>
> Thanks!
>
> On Wednesday, June 1, 2016 at 3:55:35 PM UTC-5, Mike Bayer wrote:
>>
>> there's no "eager" strategy.  you'd want something like lazy="joined" or 
>> something like that.   check the docs. 
>>
>>
>>
>> On 06/01/2016 04:19 PM, Horcle wrote: 
>> > Hi Mike, 
>> > Just verifying: 
>> > 
>> > Should 
>> > 
>> > class Patient(Model): 
>> >       encounters = relationship( 
>> >               "Encounter", 
>> >               backref_populates='patient', 
>> >               lazy='dynamic') 
>> > 
>> > be 
>> > 
>> > class Patient(Model): 
>> >       encounters = relationship( 
>> >               "Encounter", 
>> >               back_populates='patient', 
>> >               lazy='dynamic') 
>> > 
>> > 
>> > If this is true, I am getting an error that 
>> > 
>> > Exception: can't locate strategy for <class 
>> > 'sqlalchemy.orm.relationships.RelationshipProperty'> (('lazy', 
>> 'eager'),) 
>> > 
>> > Btw, we rebuilt the database using patient_id as a primary key. 
>> > 
>> > Thanks for your help! 
>> > 
>> > Greg-- 
>> > 
>> > On Tuesday, May 31, 2016 at 3:49:29 PM UTC-5, Mike Bayer wrote: 
>> > 
>> >     you should use "dynamic" and your relationships are mis-configured 
>> with 
>> >     mis-use of the backref() construct, as you've constructed 
>> relationships 
>> >     on both sides that are mutual you'd use back_populates: 
>> > 
>> > 
>> >     class Encounter(Model): 
>> >         patient = relationship( 
>> >                "Patient", 
>> >                back_populates='encounters', 
>> >                lazy='eager') 
>> > 
>> >     class Patent(Model): 
>> >           encounters = relationship( 
>> >                   "Encounter", 
>> >                   backref_populates='patient', 
>> >                   lazy='dynamic') 
>> > 
>> > 
>> >     Also the foreign key from Encounter.patient_id to 
>> Patient.patient_id 
>> >     does not illustrate a unique index in use and will not be accepted 
>> by 
>> >     all database backends as a real constraint unless one is added (and 
>> >     regardless, performance will suffer without an index on this 
>> column). 
>> >     Typically, Encounter.patient_id would refer to the primary key of 
>> >     Patient which is Patient.id. 
>> > 
>> > 
>> > 
>> >     On 05/31/2016 04:38 PM, Horcle wrote: 
>> >     > I guess my question is: How can I efficiently load Patient and 
>> its 
>> >     > related Encounters? I have tried various loading strategies of 
>> >     dynamic, 
>> >     > joined (I would think this would be the desired option), 
>> subquery, no 
>> >     > load, etc., and it these do not load. On the other hand, I can 
>> load 
>> >     > Encounter just fine and access an instance of the Patient object. 
>> >     > 
>> >     > 
>> >     > 
>> >     > On Tuesday, May 31, 2016 at 11:20:37 AM UTC-5, Horcle wrote: 
>> >     > 
>> >     >     I have the following two models: 
>> >     > 
>> >     >     | 
>> >     >     ClassEncounter(Model): 
>> >     >         __tablename__ ='cp_service' 
>> >     >         id =Column(Integer,primary_key=True,autoincrement=True) 
>> >     >         master_service_id =Column(String(255)) 
>> >     >         admission_datetime =Column(DateTime) 
>> >     >         admission_provider_id =Column(String(255)) 
>> >     >         admission_status =Column(String(255)) 
>> >     >         age_at_visit =Column(String(255)) 
>> >     >         attending_provider_id =Column(String(255)) 
>> >     >         center =Column(String(255)) 
>> >     >         department_name =Column(String(255)) 
>> >     >         discharge_datetime =Column(DateTime) 
>> >     >         encounter_category =Column(String(255)) 
>> >     >         encounter_class =Column(String(255)) 
>> >     >         encounter_date =Column(DateTime) 
>> >     >         encounter_setting =Column(String(255)) 
>> >     >         encounter_type =Column(String(255)) 
>> >     >         primary_care_provider_id =Column(String(255)) 
>> >     >         primary_service_yn =Column(String(255)) 
>> >     >         provider_id =Column(String(255)) 
>> >     >         serv_area_id_orig =Column(String(255)) 
>> >     >         service_id =Column(Integer) 
>> >     >         patient_id 
>> >     =Column(Integer,ForeignKey('cp_patient.patient_id')) 
>> >     >         patient 
>> >     > 
>> >     
>> =relationship("Patient",backref=backref("patientEncounter"),lazy='eager',primaryjoin="Patient.patient_id==Encounter.patient_id")
>>  
>>
>> > 
>> >     >     | 
>> >     > 
>> >     >     | 
>> >     >     classPatient(Model): 
>> >     >         __tablename__ ='cp_patient' 
>> >     >         id =Column(Integer,primary_key=True,autoincrement=True) 
>> >     >         first_name =Column(String(100)) 
>> >     >         middle_name =Column(String(80)) 
>> >     >         last_name =Column(String(80)) 
>> >     >         sex =Column(String(80)) 
>> >     >         race =Column(String(80)) 
>> >     >         birth_date =Column(DateTime) 
>> >     >         ethnicity =Column(String(80)) 
>> >     >         race =Column(String(80)) 
>> >     >         patient_id =Column(Integer) 
>> >     >         mrn =Column(String(80)) 
>> >     >         title =Column(String(80)) 
>> >     >         suffix =Column(String(80)) 
>> >     >         name_alias =Column(String(80)) 
>> >     >         addr_1 =Column(String(80)) 
>> >     >         addr_2 =Column(String(80)) 
>> >     >         addr_3 =Column(String(80)) 
>> >     >         city =Column(String(80)) 
>> >     >         state =Column(String(80)) 
>> >     >         country =Column(String(80)) 
>> >     >         zip =Column(String(80)) 
>> >     >         encounter 
>> >     > 
>> >     
>> =relationship("Encounter",backref=backref("Patient"),lazy='dynamic',primaryjoin="Patient.patient_id==Encounter.patient_id")
>>  
>>
>> > 
>> >     >     | 
>> >     > 
>> >     > 
>> >     >     Where one patient can have many encounters. 
>> >     > 
>> >     >     I am able to load the patent model fine in a scaffolded list 
>> >     when I 
>> >     >     comment out the encounter relationship in the last line 
>> (there 
>> >     are 
>> >     >     roughly 35K patients), but when I link it to Encounters (1.7 
>> >     >     million), then I am running into major performance issues. I 
>> >     tried 
>> >     >     using lazy='dynamic', but got an error that: 
>> >     >     | 
>> >     >     Onrelationship Encounter.patient,'dynamic'loaders cannot be 
>> used 
>> >     >     withmany-to-one/one-to-one relationships and/oruselist=False. 
>> >     >     | 
>> >     > 
>> >     >     What other options are there available to not load all the 
>> >     relations 
>> >     >     until needed? 
>> >     > 
>> >     >     Thanks! 
>> >     > 
>> >     > -- 
>> >     > 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+...@googlegroups.com <javascript:> 
>> >     > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:>>. 
>> >     > To post to this group, send email to sqlal...@googlegroups.com 
>> >     <javascript:> 
>> >     > <mailto:sqlal...@googlegroups.com <javascript:>>. 
>> >     > 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>. 
>> > 
>> > -- 
>> > 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+...@googlegroups.com 
>> > <mailto:sqlalchemy+unsubscr...@googlegroups.com>. 
>> > To post to this group, send email to sqlal...@googlegroups.com 
>> > <mailto:sqlal...@googlegroups.com>. 
>> > Visit this group at https://groups.google.com/group/sqlalchemy. 
>> > For more options, visit https://groups.google.com/d/optout. 
>>
>

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