Έξυπνες αναζητήσεις
Το googling είναι μια από τις πιο σημαντικές δεξιότητες για κάθε προγραμματιστή. Ας δούμε πώς κάνουμε εξειδικευμ...
Το googling είναι μια από τις πιο σημαντικές δεξιότητες για κάθε προγραμματιστή. Ας δούμε πώς κάνουμε εξειδικευμ...
Στη JavaScript, οι χρονικές σημάνσεις συνήθως συσχετίζονται με την ώρα Unix. Και υπάρχουν διαφορετικές μέθοδοι για τ...
Αλληλεπιδρούμε πολύ με το HTTP και το HTTPS στην καθημερινή μας ζωή, αλλά πολλοί από εμάς δεν γνωρί...
An absolute path refers to defining the full exact file path, for example, D:\http\project\lib\file.php. While a relative path is based on the current working directory, where the script is located. ...
What Is a PHP Interface? A PHP interface defines a contract which a class must fulfill. If a PHP class is a blueprint for objects, an interface is a blueprint for classes. Any class implementing a ...
Συχνά χρειάζεται να αποθηκεύουμε κάποια δεδομένα ενώ εργαζόμαστε στα projects μας. Μπορούμε να χρησιμοποιήσουμε μια βάση δεδομένων SQL ή NoSQL με έναν διακομιστή, αλλά αυτό θα απαιτούσε να κάνουμε μια εγκατάσταση. Η PysonDB είναι μια βάση δεδομένων προσανατολισμένη στα έγγραφα, γραμμένη σε καθαρή Python. Αναπτύχθηκε από τον Fredy Somy , είναι απλή, και αποτελεσματική. Η λέξη PysonDB έχει δημιουργηθεί από τις λέξεις Python, JSON και DB. Επομένως, είναι μια βάση δεδομένων που βασίζεται σε JSON.
Τα χαρακτηριστικά της:
Υπόψιν ότι δεν μπορούμε να αποθηκεύσουμε εικόνες, βίντεο στην PysonDB.
H εγκατάσταση γίνεται όπως σε όλα τα πακέτα της python:
pip install pysondb
Ας δούμε ένα παράδειγμα Todo, στο οποίο χρειαζόμαστε λειτουργίες CRUD. Το πρώτο πράγμα που θα κάνουμε είναι να δημιουργήσουμε μια βάση δεδομένων που ονομάζεται todo.json.
from pysondb import getDb
todo_db = getDb('todo.json')
Καλώντας τη μέθοδο getDB() με το όνομα της βάσης που θέλουμε, δημιουργείται μία κενή βάση δεδομένων (αρχείο JSON):
{ "data": [] }
Εισαγωγή δεδομένων. Η εισαγωγή δεδομένων είναι αρκετά απλή στην PysonDB. Έχουμε δύο μεθόδους: add() εισάγουμε μία εγγραφή και addMany() για εισαγωγή περισσότερων της μιας εγγραφής. Εκείνο που πρέπει να προσέξουμε είναι το σχήμα της βάσης δεδομένων. Όποια δεδομένα προστεθούν πρώτα, δημιουργείται το σχήμα για ολόκληρη τη βάση δεδομένων. Οποιαδήποτε παρατυπία σχήματος απορρίπτει τα δεδομένα. Ας δούμε ένα παράδειγμα.
Μέθοδος add()
new_item = {"name": "Book", "quantity": 5}
item_id = todo_db.add(new_item)
print(item_id)
# Output
# 259596727698286139
Πρώτα απ 'όλα, δημιουργήσαμε ένα νέο λεξικό που ονομάζεται new_item με πεδία τα name και quantity με τις αντίστοιχες τιμές τους Book και 5. Στη συνέχεια χρησιμοποιήσαμε τη add()μέθοδο για να εισάγουμε τα δεδομένα στη βάση δεδομένων μας. Η add()μέθοδος επιστρέφει το μοναδικό αναγνωριστικό του αντικειμένου που έχει εισαχθεί.
Ας δούμε πώς φαίνεται τώρα το αρχείο JSON μας:
{
"data": [
{
"name": "Book",
"quantity": 5,
"id": 259596727698286139
}
]
}
Ας δούμε τώρα ένα παράδειγμα παρατυπίας σχήματος. Μέχρι τώρα έχουμε εισαγάγει ένα αντικείμενο με πεδία name και quantity. Tώρα ας προσθέσουμε άλλο ένα πεδίο στη βάση με δεδομένα.
another_item = {"name": "Milk", "quantity": "5L", "price": 310}
another_item_id = todo_db.add(another_item)
print(another_item_id)
Τώρα αν προσπαθήσετε να εκτελέσετε το πρόγραμμα, θα συναντήσετε ένα SchemaError. Άρα βλέπουμε ότι η γραμμογράφηση της βάσης πρέπει να γίνει σωστά από την αρχή, χωρίς περαιτέρω τροποποίηση.
Μέθοδος addMany()
Ας δούμε πώς μπορούμε να προσθέσουμε περισσότερα από ένα αντικείμενα χρησιμοποιώντας τη addMany() μέθοδο.
new_items = [
{"name": "Copies", "quantity": 10},
{"name": "Pen", "quantity": 4},
]
todo_db.addMany(new_items)
Σε αυτήν την περίπτωση, δημιουργήσαμε ένα list of dictionaries που ονομάζεται new_items και χρησιμοποιήσαμε τη addMany() μέθοδο για την εισαγωγή των στοιχείων. Αυτή η μέθοδος δεν επιστρέφει τίποτα.
Αναζήτηση δεδομένων. Υπάρχουν πολλές μέθοδοι για την ανάκτηση δεδομένων από τη βάση. Ας τα δούμε ένα προς ένα.
Μέθοδος get(): Η get()μέθοδος από προεπιλογή επιστρέφει ένα στοιχείο από τη βάση δεδομένων.
data = todo_db.get()
print(data)
Αποτέλεσμα:
[{'name': 'Book', 'quantity': 5, 'id': 259596727698286139}]
Η μέθοδος get() μπορεί να έχει και μια προαιρετική παράμετρο n όπου n είναι ο αριθμός των αντικειμένων που πρέπει να ανακτηθούν.
data = todo_db.get(2)
print(data)
Αποτέλεσμα:
[{'name': 'Book', 'quantity': 5, 'id': 259596727698286139}, {'name': 'Copies', 'quantity': 10, 'id': 313160125004626021}]
Ωστόσο, εάν δώσουμε μια τιμή n μεγαλύτερη από τον αριθμό των αντικειμένων στη βάση δεδομένων, επιστρέφει μια λίστα με ένα λεξικό που έχει μια κενή συμβολοσειρά ως κλειδί καθώς και την τιμή.
data = todo_db.get(10)
print(data)
Αποτέλεσμα:
[{'': ''}]
Μέθοδος getAll(). Όπως υποδηλώνει το ίδιο το όνομα, η getAll()θα επιστρέψει όλα τα δεδομένα από τη βάση δεδομένων.
data = todo_db.getAll()
print(data)
Αποτέλεσμα:
[{'name': 'Book', 'quantity': 5, 'id': 259596727698286139}, {'name': 'Copies', 'quantity': 10, 'id': 313160125004626021}, {'name': 'Pen', 'quantity': 4, 'id': 588928180640637551}]
Μέθοδος getByQuery(). Η getByQuery() λαμβάνει ένα ερώτημα παραμέτρου όπου το ίδιο το ερώτημα είναι δεδομένα JSON. Επιστρέφει δεδομένα που ταιριάζουν με το ερώτημα.
q = {"name": "Book"}
data = todo_db.getByQuery(query=q)
print(data)
Αποτέλεσμα:
[{'name': 'Book', 'quantity': 5, 'id': 259596727698286139}]
Εάν κανένα στοιχείο δεν ταιριάζει με το ερώτημα, επιστρέφεται μια κενή λίστα..
Μέθοδος getById(). Εάν θέλουμε να εμφανίσουμε ένα αντικείμενο χρησιμοποιώντας το μοναδικό αναγνωριστικό του, θα χρησιμοποιήσουμε τη μέθοδο getById(). Χρειάζεται μια ακέραια παράμετρο pk που είναι το μοναδικό αναγνωριστικό που δίνεται σε κάθε αντικείμενο στη βάση δεδομένων.
data = todo_db.getById(pk=588928180640637551)
print(data)
Αποτέλεσμα:
{'name': 'Pen', 'quantity': 4, 'id': 588928180640637551}
Εάν κανένα αναγνωριστικό δεν ταιριάζει με το παρεχόμενο ID, συναντάμε ένα σφάλμα IdNotFoundError.
Μέθοδος reSearch(). Η reSearch()μέθοδος παίρνει δύο παραμέτρους: key και _re όπου key είναι οποιοδήποτε από τα keys μας στη βάση δεδομένων, όπως το name και quantity, στο παράδειγμά μας, και το _re είναι ένα regex μοτίβο για την τιμή του αντίστοιχου κλειδιού.
data = todo_db.reSearch(key="name", _re=r"[A-Za-z]*")
print(data)
Εδώ έχουμε χρησιμοποιήσει ένα μοτίβο regex για οποιαδήποτε λέξη που περιέχει string και το key είναι το name.
Αποτέλεσμα:
[{'name': 'Book', 'quantity': 5, 'id': 259596727698286139}, {'name': 'Copies', 'quantity': 10, 'id': 313160125004626021}, {'name': 'Pen', 'quantity': 4, 'id': 588928180640637551}]
Ενημέρωση δεδομένων
Για την ενημέρωση έχουμε τις μεθόδους:
1. Μέθοδος updateById()
Η updateById() μέθοδος παίρνει δύο παραμέτρους: pk και new_data , όπου pk είναι το μοναδικό αναγνωριστικό του αντικειμένου που πρέπει να ενημερωθεί με το new_data.
updated_data = {"name": "Book", "quantity": 100}
todo_db.updateById(pk=259596727698286139, new_data=updated_data)
Αποτέλεσμα:
{
"data": [
{
"name": "Book",
"quantity": 100,
"id": 259596727698286139
},
{
"name": "Copies",
"quantity": 10,
"id": 313160125004626021
},
{
"name": "Pen",
"quantity": 4,
"id": 588928180640637551
}
]
}
Εάν η τιμή pk δεν υπάρχει, παίρνουμε σφάλμα IdNotFoundError.
2. Η μέθοδος updateByQuery()
Η updateByQuery()μέθοδος παίρνει δύο παραμέτρους: db_dataset και new_dataset , όπου το db_dataset αναφέρεται στο ερώτημα που πρέπει να αλλάξει με το new_dataset.
query_data = {"name": "Copies"}
updated_data = {"name": "Copies", "quantity": 200}
todo_db.updateByQuery(db_dataset=query_data, new_dataset=updated_data)
Διαγραφή δεδομένων
1. Μέθοδος deleteByID()
Εδώ χρειαζόμαστε μια παράμετρος pk, με το μοναδικό αναγνωριστικό ID οποιωνδήποτε δεδομένων στη βάση δεδομένων.
is_deleted = todo_db.deleteById(pk=259596727698286139)
print(is_deleted)
Αποτέλεσμα:
True
Και εδώ ισχύει το σφάλμα, αν το pk δεν υπάρχει.
2. Μέθοδος deleteAll()
Με τη μέθοδος αυτή αδειάζουμε τα περιεχόμενα της βάσης. Όταν εκτελεστεί η εντολή todo_db.deleteAll(), θα έχουμε την αρχική γραμμογράφηση χωρίς δεδομένα { "data": [] }
Η γραμμή εντολών (CLI)
Ένα από τα μοναδικά χαρακτηριστικά της PysonDB είναι οι λειτουργίες της γραμμής εντολών που μπορούμε να εκτελέσουμε χρησιμοποιώντας την. Ας δούμε τι μπορούμε να κάνουμε χρησιμοποιώντας τη γραμμή εντολών.
1. Δημιουργία βάσης: pysondb create [name]
2. Διαγραφή βάσης: pysondb delete [name]
3. Εμφάνιση δεδομένων: pysondb show [name]. Έχουμε μια βάση δεδομένων που ονομάζεται todo.jsonμε τα περιεχόμενα:
{
"data": [
{
"name": "Book",
"quantity": 5,
"id": 241737821309633823
},
{
"name": "Copies",
"quantity": 10,
"id": 895733868606022035
},
{
"name": "Pen",
"quantity": 4,
"id": 314476424041647076
},
{
"name": "Dictionary",
"quantity": 1,
"id": 338909711735495602
},
{
"name": "Stickers",
"quantity": 10,
"id": 460456836143359145
}
]
}
Αν πληκτρολογήσουμε την παραπάνω εντολή θα πάρουμε αποτέλεσμα:
4. Μετατροπή CSV σε JSON
pysondb convert [path of csv file] [path of json file]
Αυτή η εντολή μας βοηθά να μετατρέψουμε δεδομένα CSV σε βάση δεδομένων JSON.
Για παράδειγμα, έχουμε ένα αρχείο CSV με τα περιεχόμενα:
name,quantity,id
Book,5,241737821309633823
Copies,10,895733868606022035
Pen,4,314476424041647076
Dictionary,1,338909711735495602
Stickers,10,460456836143359145
5. Μετατροπή της βάση δεδομένων JSON σε CSV
pysondb converttocsv [path of json file] [optional name for target CSV file]
Αυτή η εντολή μας βοηθά να μετατρέψουμε μια βάση δεδομένων JSON σε δεδομένα CSV.
6. Συγχώνευση 2 αρχείων JSON
pysondb merge [path of primary json file] [path of json file to merge] [optional name for target json file]
one.json :
{
"data": [
{ "name": "Item1", "quantity": "5", "id": 9618007132 },
{ "name": "Item2", "quantity": "10", "id": 8052463398 },
{ "name": "Item3", "quantity": "4", "id": 1677865420 },
{ "name": "Item4", "quantity": "1", "id": 4466016920 },
{ "name": "Item5", "quantity": "10", "id": 9836191198 }
]
}
two.json :
{
"data": [
{ "name": "Item6", "quantity": "5", "id": 9618007232 },
{ "name": "Item7", "quantity": "10", "id": 8052464398 },
{ "name": "Item8", "quantity": "4", "id": 1677865520 },
{ "name": "Item9", "quantity": "1", "id": 4466016020 },
{ "name": "Item10", "quantity": "10", "id": 9836181198 }
]
}
Η παρακάτω εντολή θα συγχωνεύσει δεδομένα από το two.json στο one.json .
>>> pysondb merge one.json two.json
Τώρα το αρχείο μας one.json έχει τα ακόλουθα περιεχόμενα:
{
"data": [
{ "name": "Item6", "quantity": "5", "id": 9618007232 },
{ "name": "Item7", "quantity": "10", "id": 8052464398 },
{ "name": "Item8", "quantity": "4", "id": 1677865520 },
{ "name": "Item9", "quantity": "1", "id": 4466016020 },
{ "name": "Item10", "quantity": "10", "id": 9836181198 },
{ "name": "Item1", "quantity": "5", "id": 9618007132 },
{ "name": "Item2", "quantity": "10", "id": 8052463398 },
{ "name": "Item3", "quantity": "4", "id": 1677865420 },
{ "name": "Item4", "quantity": "1", "id": 4466016920 },
{ "name": "Item5", "quantity": "10", "id": 9836191198 }
]
}
Βλέουμε ότι τα δεδομένα από το two.json προστίθενται πάνω από τα δεδομένα στο αρχείο one.json. Μπορούμε επίσης να έχουμε το συγχωνευμένο περιεχόμενο σε ξεχωριστό αρχείο χωρίς να αλλάξουμε τα δεδομένα οποιουδήποτε από τα αρχεία:
>>> pysondb merge one.json two.json -o merged.json
Η παραπάνω εντολή θα δημιουργήσει ένα αρχείο merged.json και θα τοποθετήσει το συγχωνευμένο περιεχόμενο σε αυτό το αρχείο. Σε αυτήν την περίπτωση, το one.json και το two.json δεν θα αλλάξουν καθόλου.
Παρατηρήστε τη σημαία -o στην παραπάνω εντολή πριν από το όνομα του αρχείου εξόδου.
Η σελίδα του προγραμματιστή στο github
Εγγραφείτε για να βλέπετε τα εξειδικευμένα άρθρα.