функция get Json распечатывает пустой список при вводе пользователем - PullRequest
0 голосов
/ 18 марта 2020

Я создаю программу, в которой пользователь выбирает город из раскрывающегося меню в data.py * и выводит данные для этого города. После того, как пользователь выбирает город, он входит в функцию get Json в backend.py *, которая принимает выбранный пользователем город в качестве аргумента. Функция get Json извлекает данные из таблицы SQLite3 и возвращает строку json, представляющую собой список, содержащий словарь с ключом города и данные в качестве значений. После того, как я получил код в функции get Json для работы в своем собственном модуле, путем жесткого кодирования аргумента city он выводит правильный вывод строки json. Однако, когда я пытаюсь запустить get Json из модуля меню, при попытке запустить get Json через этот модуль пользовательского интерфейса выводится правильный введенный пользователем город, но пустой список без словаря.

Вот мой код для создания таблицы SQLite3 и функции get Json в бэкэнд-модуле:

class Backend:
    def sql(self):``
    self.cur.execute(
        'CREATE TABLE IF NOT EXISTS C(City TEXT, Year TEXT, Value TEXT)')
    for record in self.cities:
        self.cur.execute(
            '''INSERT INTO C (City, Year, Value) VALUES (?, ?, ?)''',
            (record[0], record[1], record[2]))


    def getJson(self, userInput):
       self.cur = self.conn.cursor()
       self.cur.execute("""SELECT * FROM C WHERE City='%s'""" % userInput)
       records = self.cur.fetchall()
       #self.cur.execute("DELETE FROM C")^^^this line
       with open('Cities.json', 'w') as fh:
           city_as_dict = [{'City': city[0], 'Year': city[1], 'Value': city[2]} for city in records]
           json.dump(city_as_dict, fh, indent=3)
        with open('Cities.json', 'r') as fh:
           self.json_string = json.load(fh)
        fh.close()
        print(self.json_string)
        return self.json_string

А вот код для меню и функции, которая принимает пользовательский ввод в модуле данных:

from backend import Backend

class UI:
    def __init__(self):
      self.b = Backend()
      self.OPTIONS =self.b.cities

      self.master = Tk()
      self.variable = StringVar(self.master)
      self.variable.set(self.OPTIONS[0])
      self.city = ""

      w = OptionMenu(self.master, self.variable, *self.OPTIONS)
      w.pack()

      button = Button(self.master, text="OK", command=self.ok)
      button.pack()

   def ok(self):
      self.city = self.variable.get()
      print(self.city)
      self.b.getJson(self.city)

Ex Вывод при запуске backend.py с жестко закодированным городом:

[{Chica go: 2015, 100}, {Chica go: 2016, 200}, {Chica go: 2017, 300}]

Ex Вывод при запуске data.py с Chica go Выбрано из меню:

Chica go
[]

Также появляется ошибка, когда я запускаю backend.py с (self.cur.execute («DELETE FROM C»)) этой строкой кода, она работает отлично, но когда я запускаю из data.py , это дает базе заблокированную ошибку. Я предполагаю, что большинство моих ошибок - какая-то синтаксическая ошибка, но я не могу понять, какая часть неправильна в моем коде. Любые отзывы или исправления будут действительно полезны. Спасибо, ребята !!

...