Як написати просту базу даних іграшок на Python за лічені хвилини

MySQL, PostgreSQL, Oracle, Redis та багато інших, ви просто назвали їх - бази даних - це дійсно важлива технологія для прогресу людської цивілізації. Сьогодні ми можемо побачити, наскільки цінними є дані , і тому збереження їх у безпеці та стабільності - це те, де база даних надходить!

Тож ми бачимо, наскільки важливі також бази даних. Довгий час я думав створити власну базу даних іграшок, щоб просто зрозуміти, пограти та експериментувати з нею. Як сказав Річард Фейнман :

"Що я не можу створити, я не розумію".

Тож без зайвих розмов давайте перейдемо до найцікавішої частини: кодування.

Почнемо кодування ...

Для цієї бази даних іграшок ми будемо використовувати Python (мій улюблений ❤️). Я назвав цю базу даних FooBarDB (я не міг знайти жодної іншої назви?), Але ви можете називати її як завгодно!

Отже, давайте спочатку імпортуємо деякі необхідні бібліотеки Python, які вже доступні у стандартній бібліотеці Python:

import json import os

Так, нам потрібні лише ці дві бібліотеки! Нам потрібно, jsonоскільки наша база даних базуватиметься на JSON, а також osна деяких матеріалах, пов’язаних із шляхом.

Тепер давайте визначимо основний клас FoobarDBз деякими досить базовими функціями, про що я розповім нижче.

class FoobarDB(object): def __init__(self , location): self.location = os.path.expanduser(location) self.load(self.location) def load(self , location): if os.path.exists(location): self._load() else: self.db = {} return True def _load(self): self.db = json.load(open(self.location , "r")) def dumpdb(self): try: json.dump(self.db , open(self.location, "w+")) return True except: return False

Тут ми визначили наш основний клас із __init__функцією. Під час створення бази даних Foobar нам потрібно лише передавати розташування бази даних. У першій __init__функції ми беремо параметр location і замінюємо ~або ~userдомашній каталог користувача, щоб він працював належним чином. І, нарешті, помістіть його у self.locationзмінну, щоб отримати доступ до нього пізніше за тими ж функціями класу. Врешті-решт, ми викликаємо loadфункцію, що передається self.locationяк аргумент.

. . . . def load(self , location): if os.path.exists(location): self._load() else: self.db = {} return True . . . .

У наступній loadфункції ми приймаємо розташування бази даних як параметр. Потім перевірте, чи існує база даних чи ні. Якщо він існує, ми завантажуємо його _load()функцією (пояснюється нижче). В іншому випадку ми створюємо порожній об'єкт JSON в пам'яті. І, нарешті, поверніть справжній успіх.

. . . . def _load(self): self.db = json.load(open(self.location , "r")) . . . .

У _loadфункції ми просто відкриваємо файл бази даних з місця, що зберігається в self.location. Потім ми перетворюємо його в об'єкт JSON і завантажуємо у self.dbзмінну.

. . . . def dumpdb(self): try: json.dump(self.db , open(self.location, "w+")) return True except: return False . . . .

І нарешті, dumpdbфункція: її назва говорить про те, чим вона займається. Він бере із self.dbзмінної базу даних в пам’яті (насправді об’єкт JSON) і зберігає її у файлі бази даних! Він повертає True, якщо успішно збережений, інакше повертає False.

Зробити це трохи більш корисним ...?

Почекай хвилинку! ? База даних марна, якщо вона не може зберігати та отримувати дані, чи не так? Підемо і додамо їх також ...?

. . . . def set(self , key , value): try: self.db[str(key)] = value self.dumpdb() return True except Exception as e: print("[X] Error Saving Values to Database : " + str(e)) return False def get(self , key): try: return self.db[key] except KeyError: print("No Value Can Be Found for " + str(key)) return False def delete(self , key): if not key in self.db: return False del self.db[key] self.dumpdb() return True . . . .

setФункція для додавання даних в базу даних. Оскільки наша база даних є простою базою даних на основі ключа і значення, ми будемо брати лише аргумент keyі valueяк аргумент.

Спочатку ми спробуємо додати ключ і значення до бази даних, а потім збережемо базу даних. Якщо все піде правильно, це поверне Істину. В іншому випадку він надрукує повідомлення про помилку і поверне False. (Ми не хочемо, щоб він аварійно завершив роботу і видалив наші дані щоразу, коли виникає помилка?).

. . . . def get(self, key): try: return self.db[key] except KeyError: return False . . . .

getє простою функцією, ми беремо keyяк аргумент і намагаємось повернути значення, пов'язане з ключем, з бази даних. В іншому випадку False повертається з повідомленням.

. . . . def delete(self , key): if not key in self.db: return False del self.db[key] self.dumpdb() return True . . . .

deleteФункція полягає у видаленні ключа, а також його значення з бази даних. Спочатку ми переконуємось, що ключ присутній у базі даних. Якщо ні, ми повертаємо False. В іншому випадку ми видаляємо ключ із вбудованою delфункцією, яка автоматично видаляє значення ключа. Далі ми зберігаємо базу даних, і вона повертає false.

Тепер ви можете подумати, а що, якщо я створив велику базу даних і хочу її скинути? Теоретично ми можемо використовувати delete- але це не практично, а також дуже трудомістко! Отже, ми можемо створити функцію для виконання цього завдання ...

. . . . def resetdb(self): self.db={} self.dumpdb() return True . . . .

Ось функція скидання бази даних resetdb! Це так просто: по-перше, ми робимо повторне присвоєння нашої бази даних в пам’яті порожнім об’єктом JSON, і це просто зберігає! І це все! Наша база даних тепер знову поголена.

Нарешті ...?

Ось це друзі! Ми створили власну базу даних про іграшки ! ?? Насправді, Fo obarDB - це лише проста демонстрація бази даних. Це як дешева саморобна іграшка: ви можете вдосконалити її як завгодно. Ви також можете додати багато інших функцій відповідно до своїх потреб.

Повне джерело тут? bauripalash / foobardb

Сподіваюся, вам сподобалось! Повідомте мене про ваші пропозиції, ідеї чи помилки, які я зробив у коментарях нижче! ?

Слідувати / пінгувати мене в соціальних мережах? Facebook, Twitter, Instagram

Дякую! До зустрічі!

Якщо вам подобається моя робота (мої статті, історії, програмне забезпечення, дослідження та багато іншого), подумайте, купіть мені каву ☕?