Πώς να μάθετε αν ένας τεμπέλης σχέση δεν έχει ακόμη τοποθετηθεί, με SQLAlchemy;

ψήφοι
11

Με SQLAlchemy, είναι ένας τρόπος να γνωρίζουμε εκ των προτέρων αν μια σχέση θα ήταν τεμπέλης-φορτωμένο εκεί;
Για παράδειγμα, δίνεται ένα χαλαρό γονέα> παιδιών σχέση και μια παρουσία X του «γονέα», θα ήθελα να ξέρω αν «X.children» έχει ήδη φορτωθεί, χωρίς την ενεργοποίηση του ερωτήματος.

Δημοσιεύθηκε 03/11/2008 στις 13:28
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
4

Νομίζω ότι θα μπορούσαμε να εξετάσουμε του παιδιού __dict__λεξικό χαρακτηριστικό για να ελέγξετε αν τα δεδομένα είναι ήδη εκεί ή όχι.

Απαντήθηκε 04/11/2008 στις 06:48
πηγή χρήστη

ψήφοι
3

Ελαφρώς πιο τακτοποιημένο από Haes απάντηση (αν και έχει ουσιαστικά το ίδιο πράγμα) είναι η χρήση hasattr (), όπως σε:

>>> hasattr(X, 'children')
False
Απαντήθηκε 15/01/2013 στις 08:34
πηγή χρήστη

ψήφοι
10

Μπορείτε να πάρετε μια λίστα με όλες τις εκφορτώνονται ιδιότητες (και οι δύο σχέσεις και στήλες) από sqlalchemy.orm.attributes.instance_state(obj).unloaded.

Δείτε: Ολοκλήρωση αντικείμενο με τις σχέσεις της και να αποφεύγονται οι περιττές ερωτήσεις στην sqlalchemy

Ένας ευκολότερος τρόπος είναι να χρησιμοποιήσετε inspect(), που δίνει τα ίδια αποτελέσματα:

from sqlalchemy import inspect
from sqlalchemy.orm import lazyload

user = session.query(User).options(lazyload(User.articles)).first()
ins = inspect(user)

ins.unloaded  # <- set or properties that are not yet loaded
Απαντήθηκε 29/07/2014 στις 08:05
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more