Django 4. SQL Lite. Робота з даними.
Моделі ми вже описали і створили таблиці нашої бази даних. Тепер будемо з ними працювати. Зроблю деякі нотатки з цього приводу.
Взагалі працювати в Django з цим дуже легко.
Щоб працювати з нашими моделями, треба імпортувати їх. Зробимо це в нашому файлі с запитами.
Нагадаю, ми створюємо облік фінансів і створені таблиці збергіють саме дані для цього. Розглянемо основні методи роботи з БД.
1 |
from .models import Wallets,Ballance,Transactions,Categories |
Робота з таблицею wallets.
В цій таблиці ми зберігаємо дані по гаманцям. В нас буде декілька функцій:
- Додавання нового гаманця
1 2 3 4 5 6 7 8 9 10 |
# На вхід отримуємо назву гаманця і валюту def add_wallet(name, currency): #Створюємо новий запис згідно моделі Wallets new_w = Wallets() new_w.name = name new_w.currency = currency #Додаємо запис в таблицю new_w.save() |
- Видалення гаманця
1 2 3 |
#Для видалення нам потрібен тільки ключ (id) запису def del_wallet(id): Wallets.objects.filter(id=id).delete() |
- Отримання даних по гаманцям.
Отримання списку гаманців йде здвох таблиць, так як треба показати не тільки гаманці а і баланс по ним який зберігається в іншій таблиці бази даних. В таблиці балансу є поле id_wallet. По ньому і будемо з’єднуватись. Мені це зручно робити використовуючи текст запиту.
1 2 3 4 5 6 7 8 9 10 11 12 |
def list_wallets(connection): cursor = connection.cursor() #Описуємо текст запиту SQL = """ select w.name,b.total, w.currency, w.id from myfin_wallets as w left join myfin_ballance as b on b.id_wallet=w.id """ #Виконуємо запит cursor.execute(SQL) #Отримуємо результат desc = cursor.description |
Робота з таблицею Ballance.
В цій таблиці в нас зберігається активний баланс по гаманцю.
Нам потрібен запит на додавання балансу і запит на оновлення. Додавання буде схожим з запитом по гаманцю, тому достатньо буде тільки оновлення.
1 2 3 4 5 6 7 8 9 |
#Для оновленя потрібен ід гаманця і баланс def update_ballance(id, total): #Отримуємо запис з фільтром по гаманцю edit_b = Ballance.objects.get(id_wallet=id) #Прописуємо баланс і зберігаємо edit_b.total = total edit_b.save() |
Робота з іншими таблицями буде аналогічна, тому не буду розписувати. Підсумую тільки:
Основні методи роботи с запитами до БД SQL lite в Django.
Додавання запису в БД
- create – додавання нового запису
1 |
new = Wallets.objects.create(name="wallet 1", currency ="USD") |
Отримання записів з БД:
- all – отримання всіх записів таблиці. Тип отриманих даних – QuerySet.
1 |
wallets = Wallets.objects.all() |
- get – отримання тільки одного запису згідно умов.
1 |
wallet = Wallets.objects.get(name="wallet 1", currency ="USD") |
- get_or_create – отримання запису, а в разі відсутності створення
1 |
wallet = Wallets.objects.get_or_create(name="wallet 1", currency ="USD") |
- filter – отримання всіх записів зігдно відбору. Тип отриманих даних – QuerySet.
1 2 |
#Отримуємо всі записи у яких валюта дорівнює USD wallet = Wallets.objects.filter(currency ="USD") |
- exclude – отримання всіх записів за виключенням вказаних у відборі. Тип отриманих даних – QuerySet.
1 2 |
#Отримуємо всі записи у яких валюта НЕ дорівнює USD wallet = Wallets.objects.exclude(currency ="USD") |
- in_bulk- отримання всіх записів зігдно відбору . Тип отриманих даних – dict
1 2 |
#Отримуємо всі записи у вигляді словаря (dict) wallets = Wallets.objects.in_bulk() |
Оновлення запису в БД
- save – оновлення існуючого запису по ключу.
1 2 3 |
wallet= Wallets.objects.get(id=2) wallet.name = "Wallet 2" wallet.save() |
update – ще один варіант оновлення існуючого запису по ключу.
1 |
Wallets.objects.filter(id=2).update(name="Wallet 2") |
- update_or_create – оновлення існуючого запису по ключу, а якщо запис не знайдений то створення нового.
1 2 3 |
#Значення для створення у випадку відстуності запису з ід - 2 values={"name":"wallet 2", "currency" : "USD"} wallet = Wallets.objects.update_or_create(id=2, defaults = values) |
Видалення запису з БД
1 |
Wallets.objects.filter(id=id).delete() |