0

我正在创建一个程序,用户从 data.py* 的下拉菜单中选择一个城市,然后打印出该城市的数据。用户选择城市后,它进入 backend.py* 中的 getJson 函数,该函数将用户选择的城市作为参数。getJson 函数从 SQLite3 表中提取数据并返回一个 json 字符串,该字符串是一个列表,其中包含一个字典,其中城市为键,数据为值。在我让 getJson 函数中的代码在它自己的模块中工作后,通过对 city 参数进行硬编码,它会打印出正确的 json 字符串输出。但是,当我尝试从菜单模块运行 getJson 时,它会打印出正确的用户输入城市,但当我尝试通过该 UI 模块运行 getJson 时,它会打印出一个没有字典的空列表。

这是我在后端模块中创建 SQLite3 表和 getJson 函数的代码:

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)

使用硬编码城市运行 backend.py 时的 Ex 输出:

[{芝加哥: 2015, 100}, {芝加哥: 2016, 200}, {芝加哥: 2017, 300}]

从菜单中选择芝加哥运行 data.py 时的 Ex 输出:

芝加哥
[]

我得到的另一个错误是,当我使用 (self.cur.execute("DELETE FROM C")) 这行代码运行 backend.py 时,它工作得非常好,但是当我从 data.py 运行时,它给出了一个数据库被锁定错误。我猜我的大部分错误都是某种语法错误,但我似乎无法弄清楚我的代码有什么问题。任何反馈或更正都会非常有帮助。多谢你们!!

4

0 回答 0