Όλα όσα πρέπει να γνωρίζετε για τους Python και τους Χάρτες Σχέσης Αντικειμένων

Όλα όσα πρέπει να γνωρίζετε για τους Python και τους Χάρτες Σχέσης Αντικειμένων

Μπορεί να έχετε ακούσει για αντιστοίχιση αντιστοίχισης αντικειμένων (ORM). Μπορεί να έχετε χρησιμοποιήσει ακόμη και ένα, αλλά τι ακριβώς είναι αυτά; Και πώς τα χρησιμοποιείτε στην Python;





Εδώ είναι όλα όσα πρέπει να γνωρίζετε για τα ORM και την Python.





Τι είναι το ORM;

Η αντιστοίχιση αντικειμενικής χαρτογράφησης (ORM) είναι μια τεχνική προγραμματισμού που χρησιμοποιείται για την πρόσβαση σε μια βάση δεδομένων. Εκθέτει τη βάση δεδομένων σας σε μια σειρά αντικειμένων. Δεν χρειάζεται να γράψετε εντολές SQL για να εισαγάγετε ή να ανακτήσετε δεδομένα, χρησιμοποιείτε μια σειρά χαρακτηριστικών και μεθόδων που συνδέονται με αντικείμενα.





Μπορεί να ακούγεται περίπλοκο και περιττό, αλλά μπορούν να σας εξοικονομήσουν πολύ χρόνο και να σας βοηθήσουν να ελέγξετε την πρόσβαση στη βάση δεδομένων σας.

Ιδού ένα παράδειγμα. Πείτε ότι κάθε φορά που εισάγετε έναν κωδικό πρόσβασης στη βάση δεδομένων σας, θέλετε να τον κατακερματίσετε, όπως εξηγείται στην ασφάλεια κωδικού πρόσβασης ιστότοπου. Αυτό δεν είναι πρόβλημα για απλές περιπτώσεις χρήσης --- κάνετε τον υπολογισμό πριν από την εισαγωγή. Τι γίνεται όμως εάν πρέπει να εισαγάγετε μια εγγραφή σε πολλά σημεία του κώδικα; Τι θα συμβεί εάν ένας άλλος προγραμματιστής εισάγει στον πίνακά σας και δεν το γνωρίζετε;



Χρησιμοποιώντας ένα ORM, μπορείτε να γράψετε κώδικα για να διασφαλίσετε ότι όποτε και οπουδήποτε πρόσβαση σε οποιαδήποτε γραμμή ή πεδίο της βάσης δεδομένων σας, εκτελείται πρώτα ο άλλος, προσαρμοσμένος κώδικας σας.

Αυτό λειτουργεί επίσης ως «ενιαία πηγή αλήθειας». Εάν θέλετε να αλλάξετε έναν προσαρμοσμένο υπολογισμό, πρέπει να τον αλλάξετε μόνο σε ένα μέρος, όχι σε πολλά. Είναι δυνατό να εκτελέσετε πολλές από αυτές τις αρχές με αντικειμενοστραφής προγραμματισμός (OOP) στην Python , αλλά τα ORM λειτουργούν παράλληλα με τις αρχές OOP για τον έλεγχο της πρόσβασης σε μια βάση δεδομένων.





Υπάρχουν ορισμένα πράγματα που πρέπει να προσέξετε όταν χρησιμοποιείτε ένα ORM και υπάρχουν περιπτώσεις όπου μπορεί να μην θέλετε να χρησιμοποιήσετε ένα, αλλά γενικά θεωρούνται καλό πράγμα να έχετε, ειδικά σε μια μεγάλη βάση δεδομένων.

ORMs σε Python χρησιμοποιώντας SQLAlchemy

Όπως πολλές εργασίες στην Python, είναι πιο γρήγορη και ευκολότερη η εισαγωγή μιας μονάδας από το να γράψετε τη δική σας. Φυσικά, είναι δυνατό να γράψετε τη δική σας ORM, αλλά γιατί να ανακαλύψετε ξανά τον τροχό;





Τα παρακάτω παραδείγματα χρησιμοποιούν όλα SQLAlchemy , ένα δημοφιλές Python ORM, αλλά πολλές από τις αρχές ισχύουν ανεξάρτητα από την εφαρμογή.

Ρύθμιση Python για SQLAlchemy

Πριν ξεκινήσετε αμέσως, θα χρειαστεί να ρυθμίσετε το μηχάνημά σας για ανάπτυξη Python με SQLAlchemy.

Θα χρειαστεί να χρησιμοποιήσετε το Python 3.6 για να ακολουθήσετε αυτά τα παραδείγματα. Ενώ οι παλαιότερες εκδόσεις θα λειτουργήσουν, ο παρακάτω κώδικας θα χρειαστεί κάποια τροποποίηση πριν ξεκινήσει. Δεν είστε σίγουροι για τις διαφορές; Οι συχνές ερωτήσεις Python καλύπτουν όλες τις διαφορές.

Πριν από την κωδικοποίηση, θα πρέπει να ρυθμίσετε ένα περιβάλλον Python, το οποίο θα αποτρέψει προβλήματα με άλλα εισαγόμενα πακέτα Python.

Βεβαιωθείτε ότι έχετε PIP, ο διαχειριστής πακέτων Python εγκατεστημένο, το οποίο έρχεται με τις περισσότερες σύγχρονες εκδόσεις της Python.

Μόλις είστε έτοιμοι να ξεκινήσετε, μπορείτε να ξεκινήσετε προετοιμάζοντας το SQLAlchemy. Από το περιβάλλον Python στη γραμμή εντολών, εγκαταστήστε το SQLAlchemy με το εγκατάσταση pip εντολή:

pip install SQLAlchemy-1.2.9

ο 1.2.9 είναι ο αριθμός έκδοσης. Μπορείτε να το αφήσετε εκτός για να λάβετε το τελευταίο πακέτο, αλλά είναι καλή πρακτική να είστε συγκεκριμένοι. Δεν γνωρίζετε πότε μια νέα έκδοση μπορεί να σπάσει τον τρέχοντα κωδικό σας.

Τώρα είστε έτοιμοι να ξεκινήσετε την κωδικοποίηση. Σως χρειαστεί να προετοιμάσετε τη βάση δεδομένων σας για να αποδεχτείτε μια σύνδεση Python, αλλά τα παρακάτω παραδείγματα χρησιμοποιούν όλα ένα SQLite βάση δεδομένων που δημιουργήθηκε στη μνήμη παρακάτω.

Μοντέλα στην SQLAlchemy

Ένα από τα βασικά στοιχεία ενός ORM είναι το α μοντέλο Το Αυτή είναι μια τάξη Python που περιγράφει πώς πρέπει να μοιάζει ένας πίνακας και πώς πρέπει να λειτουργεί. Είναι η έκδοση ORM του ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ δήλωση σε SQL. Χρειάζεστε ένα μοντέλο για κάθε πίνακα στη βάση δεδομένων σας.

Ανοίξτε τον αγαπημένο σας επεξεργαστή κειμένου ή IDE και δημιουργήστε ένα νέο αρχείο που ονομάζεται test.py Το Εισαγάγετε αυτόν τον κωδικό εκκίνησης, αποθηκεύστε το αρχείο και εκτελέστε το:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('sqlite://') # Create the database in memory
Base.metadata.create_all(engine) # Create all the tables in the database

Αυτός ο κώδικας κάνει πολλά πράγματα. Οι εισαγωγές είναι απαραίτητες ώστε η Python να καταλάβει πού μπορεί να βρει τις ενότητες SQLAlchemy που χρειάζεται. Τα μοντέλα σας θα χρησιμοποιούν το δηλωτική_βάση αργότερα, και ρυθμίζει κάθε νέο μοντέλο να λειτουργεί όπως αναμένεται.

ο create_engine μέθοδος δημιουργεί μια νέα σύνδεση με τη βάση δεδομένων σας. Εάν έχετε ήδη μια βάση δεδομένων, θα πρέπει να αλλάξετε sqlite: // στη βάση δεδομένων σας URI. Όπως είναι, αυτός ο κώδικας θα δημιουργήσει μια νέα βάση δεδομένων μόνο στη μνήμη. Η βάση δεδομένων καταστρέφεται μόλις ολοκληρωθεί η εκτέλεση του κώδικα.

Τέλος, το create_all μέθοδος δημιουργεί όλους τους πίνακες που ορίζονται στις λειτουργίες σας στη βάση δεδομένων σας. Καθώς δεν έχετε ορίσει κανένα μοντέλο ακόμα, τίποτα δεν θα συμβεί. Προχωρήστε και εκτελέστε αυτόν τον κώδικα, για να βεβαιωθείτε ότι δεν έχετε προβλήματα ή τυπογραφικά λάθη.

Ας φτιάξουμε ένα μοντέλο. Προσθέστε μια άλλη εισαγωγή στο επάνω μέρος του αρχείου σας:

from sqlalchemy import Column, Integer, String

Αυτό εισάγει το Στήλη , Ακέραιος αριθμός , και Σειρά ενότητες από το SQLAlchemy. Ορίζουν πώς λειτουργούν οι πίνακες, τα πεδία, οι στήλες και οι τύποι δεδομένων της βάσης δεδομένων.

Κάτω από το δηλωτική_βάση , δημιουργήστε την κατηγορία μοντέλου σας:

class Cars(Base):
__tablename__ = 'cars'
id = Column(Integer, primary_key=True)
make = Column(String(50), nullable=False)
color = Column(String(50), nullable=False)

Αυτό το απλό παράδειγμα χρησιμοποιεί αυτοκίνητα, αλλά οι πίνακές σας ενδέχεται να περιέχουν οποιαδήποτε δεδομένα.

Κάθε κλάση πρέπει να κληρονομήσει Βάση Το Το όνομα του πίνακα της βάσης δεδομένων σας ορίζεται σε __tablename__ Το Αυτό πρέπει να είναι το ίδιο με το όνομα της τάξης, αλλά αυτό είναι απλώς μια σύσταση και τίποτα δεν θα σπάσει αν δεν ταιριάζουν.

Τέλος, κάθε στήλη ορίζεται ως μεταβλητή python εντός της κλάσης. Χρησιμοποιούνται διαφορετικοί τύποι δεδομένων και το πρωτεύων κλειδί Το χαρακτηριστικό λέει στην SQLAlchemy να δημιουργήσει το ταυτότητα στήλη ως κύριο κλειδί.

Προχωρήστε και προσθέστε μια τελευταία εισαγωγή, αυτή τη φορά για το Ξένο κλειδί μονάδα μέτρησης. Προσθέστε το μαζί με το δικό σας Στήλη εισαγωγή:

from sqlalchemy import Column, ForeignKey, Integer, String

Τώρα δημιουργήστε μια δεύτερη κατηγορία μοντέλου. Αυτή η κατηγορία ονομάζεται CarOwners , και αποθηκεύει στοιχεία ιδιοκτήτη συγκεκριμένων αυτοκινήτων που είναι αποθηκευμένα στο Αυτοκίνητα τραπέζι:

class CarOwners(Base):
__tablename__ = 'carowners'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
age = Column(Integer, nullable=False)
car_id = Column(Integer, ForeignKey('cars.id'))
car = relationship(Cars)

Υπάρχουν πολλά νέα χαρακτηριστικά που εισάγονται εδώ. ο car_id το πεδίο ορίζεται ως ξένο κλειδί. Συνδέεται με το ταυτότητα στο αυτοκίνητα τραπέζι. Παρατηρήστε πώς χρησιμοποιείται το όνομα του πεζού πίνακα, τοποθετημένο στο όνομα της κεφαλαίας τάξης.

Τέλος, ένα χαρακτηριστικό του αυτοκίνητο ορίζεται ως α σχέση Το Αυτό επιτρέπει στο μοντέλο σας να έχει πρόσβαση στο Αυτοκίνητα πίνακα μέσω αυτής της μεταβλητής. Αυτό αποδεικνύεται παρακάτω.

Εάν εκτελέσετε αυτόν τον κωδικό τώρα, θα δείτε ότι δεν συμβαίνει τίποτα. Αυτό συμβαίνει επειδή δεν του είπατε να κάνει κάτι αξιοσημείωτο ακόμα.

Αντικείμενα στην SQLAlchemy

Τώρα που δημιουργήθηκαν τα μοντέλα σας, μπορείτε να ξεκινήσετε την πρόσβαση στα αντικείμενα και να διαβάσετε και να γράψετε δεδομένα. Είναι καλή ιδέα να τοποθετήσετε τη λογική σας στη δική της κατηγορία και αρχείο, αλλά προς το παρόν, μπορεί να παραμείνει δίπλα στα μοντέλα.

Γράψιμο Δεδομένων

Σε αυτό το παράδειγμα, πρέπει να εισαγάγετε ορισμένα δεδομένα στη βάση δεδομένων για να μπορέσετε να τα διαβάσετε. Εάν χρησιμοποιείτε υπάρχουσα βάση δεδομένων, ενδέχεται να έχετε ήδη δεδομένα. Είτε έτσι είτε αλλιώς, είναι ακόμα πολύ χρήσιμο να γνωρίζουμε πώς να εισάγουμε δεδομένα.

Μπορεί να έχετε συνηθίσει να γράφετε ΕΙΣΑΓΕΤΕ δηλώσεις σε SQL. Η SQLAlchemy το χειρίζεται αυτό για εσάς. Δείτε πώς μπορείτε να εισαγάγετε μια σειρά στο Αυτοκίνητα μοντέλο. Ξεκινήστε με μια νέα εισαγωγή για sessionmaker :

from sqlalchemy.orm import sessionmaker

Αυτό είναι απαραίτητο για τη δημιουργία του συνεδρία και DBSession αντικείμενα, που χρησιμοποιούνται για ανάγνωση και εγγραφή δεδομένων:

DBSession = sessionmaker(bind=engine)
session = DBSession()

Τώρα βάλτε το κάτω από το δικό σας create_all δήλωση:

car1 = Cars(
make='Ford',
color='silver'
)
session.add(car1)
session.commit()

Ας αναλύσουμε αυτόν τον κώδικα. Η μεταβλητή αυτοκίνητο1 ορίζεται ως αντικείμενο που βασίζεται στο Αυτοκίνητα μοντέλο. Η μάρκα και το χρώμα του ορίζονται ως παράμετροι. Αυτό είναι σαν να λες «κάνε μου ένα αυτοκίνητο, αλλά μην το γράφεις ακόμα στη βάση δεδομένων». Αυτό το αυτοκίνητο υπάρχει στη μνήμη αλλά περιμένει να γραφτεί.

Προσθέστε το αυτοκίνητο στη συνεδρία με session.προσθέστε , και στη συνέχεια να το γράψετε στη βάση δεδομένων με συνεδρία.επιτροπή Το

Τώρα ας προσθέσουμε έναν κάτοχο:

owner1 = CarOwners(
name='Joe',
age='99',
car_id=(car1.id)
)
session.add(owner1)
session.commit()

Αυτός ο κωδικός είναι σχεδόν πανομοιότυπος με το προηγούμενο ένθετο για το Αυτοκίνητα μοντέλο. Η βασική διαφορά εδώ είναι ότι car_id είναι ένα ξένο κλειδί, επομένως χρειάζεται ένα αναγνωριστικό γραμμής που υπάρχει στον άλλο πίνακα. Αυτό είναι προσβάσιμο μέσω του car1.id ιδιοκτησία.

Δεν χρειάζεται να κάνετε ερώτηση στη βάση δεδομένων ή να επιστρέψετε αναγνωριστικά, καθώς το SQLAlchemy το χειρίζεται αυτό για εσάς (αρκεί να δεσμεύσετε πρώτα τα δεδομένα).

Ανάγνωση Δεδομένων

Αφού γράψετε κάποια δεδομένα, μπορείτε να αρχίσετε να τα διαβάζετε ξανά. Δείτε πώς μπορείτε να αναζητήσετε το Αυτοκίνητα και CarOwners πίνακες:

result = session.query(Cars).all()

Είναι τόσο απλό. Χρησιμοποιώντας το ερώτηση μέθοδος που βρέθηκε στο συνεδρία , καθορίζετε το μοντέλο και, στη συνέχεια, χρησιμοποιείτε το όλα μέθοδο ανάκτησης όλων των αποτελεσμάτων. Εάν γνωρίζετε ότι θα υπάρξει μόνο ένα αποτέλεσμα, τότε μπορείτε να χρησιμοποιήσετε το πρώτα μέθοδος:

result = session.query(Cars).first()

Μόλις ρωτήσετε το μοντέλο και αποθηκεύσετε τα αποτελέσματα που επιστρέφετε σε μια μεταβλητή, μπορείτε να έχετε πρόσβαση στα δεδομένα μέσω του αντικειμένου:

print(result[0].color)

Αυτό εκτυπώνει το χρώμα 'ασημί', καθώς αυτός ο δίσκος είναι η πρώτη σειρά. Μπορείτε να κάνετε βρόχο στο αντικείμενο αποτελέσματος, αν θέλετε.

Καθώς ορίσατε τη σχέση στο μοντέλο σας, είναι δυνατή η πρόσβαση στα δεδομένα σε σχετικούς πίνακες χωρίς να καθορίσετε μια σύνδεση:

result = session.query(CarOwners).all()
print(result[0].name)
print(result[0].car.color)

Αυτό λειτουργεί επειδή το μοντέλο σας περιέχει λεπτομέρειες για τη δομή του πίνακα σας και το αυτοκίνητο το χαρακτηριστικό ορίστηκε ως σύνδεσμος προς το αυτοκίνητα τραπέζι.

Τι δεν αρέσει στα ORM;

Αυτό το σεμινάριο κάλυψε μόνο τα βασικά, αλλά μόλις τα μάθετε, μπορείτε να προχωρήσετε στα προηγμένα θέματα. Υπάρχουν ορισμένα πιθανά μειονεκτήματα στα ORM:

  • Πρέπει να γράψετε το μοντέλο σας προτού ξεκινήσουν τυχόν ερωτήματα.
  • Είναι μια ακόμη νέα σύνταξη που πρέπει να μάθετε.
  • Μπορεί να είναι πολύ περίπλοκο για απλές ανάγκες.
  • Πρέπει να έχετε έναν καλό σχεδιασμό βάσης δεδομένων για αρχή.

Αυτά τα θέματα δεν αποτελούν μεγάλο πρόβλημα από μόνα τους, αλλά είναι πράγματα που πρέπει να προσέξετε. Εάν εργάζεστε με μια υπάρχουσα βάση δεδομένων, ενδέχεται να παρασυρθείτε.

Εάν δεν είστε πεπεισμένοι ότι ένα ORM είναι το κατάλληλο εργαλείο για εσάς, βεβαιωθείτε ότι έχετε διαβάσει για το σημαντικές εντολές SQL που πρέπει να γνωρίζουν οι προγραμματιστές Το

Μερίδιο Μερίδιο Τιτίβισμα ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ Πρέπει να αναβαθμίσετε αμέσως τα Windows 11;

Τα Windows 11 έρχονται σύντομα, αλλά πρέπει να ενημερώσετε το συντομότερο δυνατό ή να περιμένετε μερικές εβδομάδες; Ας ανακαλύψουμε.

Διαβάστε Επόμενο
Σχετικά θέματα
  • Προγραμματισμός
  • Πύθων
  • SQL
  • Φροντιστήρια κωδικοποίησης
Σχετικά με τον Συγγραφέα Τζο Κόμπερν(136 δημοσιευμένα άρθρα)

Ο Joe είναι απόφοιτος της Επιστήμης των Υπολογιστών από το Πανεπιστήμιο του Lincoln, Ηνωμένο Βασίλειο. Είναι επαγγελματίας προγραμματιστής λογισμικού και όταν δεν πετάει με drones ή δεν γράφει μουσική, μπορεί συχνά να βρεθεί να βγάζει φωτογραφίες ή να παράγει βίντεο.

πώς να εισαγάγετε μια οριζόντια γραμμή στη λέξη
Περισσότερα από τον Joe Coburn

Εγγραφείτε στο newsletter μας

Εγγραφείτε στο ενημερωτικό μας δελτίο για τεχνικές συμβουλές, κριτικές, δωρεάν ebooks και αποκλειστικές προσφορές!

Κάντε κλικ εδώ για εγγραφή