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 [email protected] <javascript:>
    > <mailto:[email protected] <javascript:>>.
    > To post to this group, send email to [email protected]
    <javascript:>
    > <mailto:[email protected] <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 [email protected]
<mailto:[email protected]>.
To post to this group, send email to [email protected]
<mailto:[email protected]>.
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to