Существует ли функция python для переопределения переменных вместо их полной перезаписи?

#python #json

#python #json

Вопрос:

Я пытаюсь в основном использовать JSON в качестве базы данных для моего бота python discord, и я заметил, что когда я сохраняю свои новые изменения в базе данных, каждое другое свойство базы данных стирается (соответствует конкретному серверу, на котором я изменяю информацию), кроме того, который я меняю, я уверен, что это что-тоэто связано с тем, как я сохраняю переменную None, «», но в любом случае, это мой код:

 role_nation = ""
role_mayor = ""
role_allied = ""
role_enemy = ""
role_foreigner = ""
nation_name = ""
servers = {}
@client.command()
async def setup(ctx, arg, role):
    global role_nation
    global role_mayor
    global role_allied
    global role_enemy
    global role_foreigner
    global nation_name
    if arg == "nation":
        role_nation = role
    if arg == "allied":
        role_allied = role
    if arg == "mayor":
        role_mayor = role
    if arg == "enemy":
        role_enemy = role
    if arg == "foreigner":
        role_foreigner = role
    if arg == "set_nation":
        nation_name = role
    roles = {"nation_name": nation_name,
            "nation": role_nation,
            "allied": role_allied,
            "mayor": role_mayor,
            "enemy": role_enemy,
            "foreigner": role_foreigner}
    servers[ctx.guild.id]= roles
    await ctx.send("Successfully saved your preferences.")
    await ctx.send(str(servers))
    with open('servers.json', 'w') as fp:
        json.dump(servers, fp)
    fp.close()
    role_nation = ""
    role_mayor = ""
    role_allied = ""
    role_enemy = ""
    role_foreigner = ""
    nation_name = ""
 

Комментарии:

1. Почему вы явно устанавливаете каждое значение "" в конце функции?

2. @chepner Совсем забыл, был частью какого-то отладочного материала. 1

Ответ №1:

Когда вы помещаете объект в файл json, он перезаписывает весь файл тем, что было сброшено. Это ожидаемое поведение. Что вам нужно сделать, так это при первом запуске сервера вам нужно загрузить предыдущий файл json, который у вас есть, в память и перезаписать вашу servers переменную. После этого данные находятся в памяти, поэтому вы можете добавлять, удалять или обновлять их, а затем, когда вам нужно снова сохранить их в файл, затем сбросить.

json не имеет встроенных функций базы данных, таких как индексация, транзакции или обновление отдельных объектов. Он просто преобразует объект в строку, чтобы вы могли поместить эту строку в файл и перезаписать этот файл.

Ответ №2:

Забыл, что в конце функции я сбрасывал каждую переменную, спасибо @chepner