Pull to refresh

Написание простой базы данных для простых задач

Идея написания несложной по своему устройству базы данных появилась случайно, но это была одна из тех идей, которые мне захотелось реализовать.


В написании кода 'ядра' я не использовал взаимодейсвия с файлами, БД во время работы программы находится в списке, а функция, необходимая для её сохранения или парсер, превращает список в строку или наоборот соответственно. Сделанно это для удобства переноса кода на другие языки программирования.


Начать я решил с написания функций необходимых для взаимодействия с базой данных, таких как создание базы данных или парсинг уже созданной базы данных. Функции получили название init и parse.


Функция init возвращает список, содержащий информацию о количестве столбцов в коде, количество строк вычисляется по формуле:


общее_количество_яйчеек_с_информацией/количество_столбцов.


Функция parse принимает строку, а возвращает список с базой данных.


def init():
    dblist = [1]
    #$
    return dblist

def parse(string):
    dblist = []
    var = ''
    x = 0
    y = len(string)
    #-
    if(string[y - 1] == '!'):
        while(x != y):
            while(string[x] != '!'):
                #-
                var += string[x]
                x += 1
            dblist += [var]
            var = ''
            x += 1
        #-
        var = dblist[0]
        dblist[0] = int(var)
        #$
        return dblist
    else:
        return '$err'

Переменная dblist — это и есть база данных, функции изменяющие БД принимают этот список в качестве параметра, изменяют и возвращают.


Неудобно, не находите?


Также вы могли заметить, что функция parse может вернуть ошибку, обработчик этих ошибок мы тоже разберем.


Далее написаны были функции записи и чтения из БД.


def write(dblist, pos, data):
    leN = len(dblist)
    leN -= 1
    #-
    if (pos > leN):
        while(leN != pos):
            #-
            dblist.append(' ')
            leN += 1
        #-
        dblist[pos] = data
    else:
        #-
        dblist[pos] = data
    #$
    return dblist

def read(dblist, pos):
    leN = len(dblist)
    if (pos > leN):
        #$
        return '$err'
    else:
        #$
        return dblist[pos]

Функция read тоже может вернуть ошибку при неверно указанной позиции данных.


Самыми короткими оказались функции создания и удаления столбца.


def mkcol(dblist):
    dblist[0] += 1
    #$
    return dblist

def delcol(dblist):
    dblist[0] -= 1
    #$
    return dblist

И наконец — функция сохранения всего этого в строку.


def save(string, dblist):
    x = 0
    while(x != len(dblist)):
    #-
        string += str(dblist[x])
        string += '!'
        #-
        x += 1
    return string

Весь код целиком можно посмотреть на GitHub.


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


import core as db

# "ERR_PARSE_END-OF-DB"
# "ERR_READ_POS"

def init():
    return db.init()

def parse(string):
    ret = db.parse(string)
    if ret == '$err':
        print("ERR_PARSE_END-OF-DB")
    else:
        return ret

def save(string, dblist):
    return save(string, dblist)

def mkcol(dblist):
    return db.mkcol(dblist)

def delcol(dblist):
    return db.delcol(dblist)

def write(dblist, pos, data):
    return db.write(dblist, pos, data)

def read(dblist, pos):
    ret = db.read(dblist, pos)
    if ret == '$err':
        print('ERR_READ_POS')
    else:
        return ret

Полностью посмотреть весь код проекта, а также помочь в усовершенствовании вы можете в репозитории на github.


P.S.: Использовать эту БД можно например для сохранения данных о персонажах и объектах в небольших самописных видеоиграх.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.