我正在python ad kivy制作应用程序,让用户输入时间,血糖,碳水化合物和药物。目前,我将来自用户输入的信息保存到TinyDB json文件中,并且不会删除以前的信息。但是,我无法弄清楚如何检索特定的信息。我想知道是否有一种方法可以将json文件保存为数组或其他可以轻松检索特定信息的内容,例如用户的最后一个葡萄糖条目。这是我目前的代码。
的.py
def save_entry(self):
store = JsonStore('entry.json')
time = self.gt.text
glucose = self.gr.text
carbs = self.c.text
medications_taken = self.mt.text
db = TinyDB('entry.json')
User = Query()
db.insert({'time': time, 'glucose': glucose, 'carbs': carbs, 'medications_taken': medications_taken})
def retrieve(self):
db = TinyDB('entry.json')
User = Query()
with open('entry.json', 'r') as f:
f = db.search(Query().time != 0)[0]
print f
.kv
<Phone>:
gt: _time
gr: _glucose_reading
c: _food
mt: _meds_taken
Screen:
name: 'new_entry'
GridLayout:
cols:1
BoxLayout:
Label:
size_hint_x: 0.22
bold: True
markup: True
text: '[size=40][color=0000ff]Time[/color][/size]'
TextInput:
id: _time
hint_text: 'Current Time'
BoxLayout:
Label:
size_hint_x: 0.22
bold: True
markup: True
text: '[size=28][color=0000ff]Blood Sugar (mg/dL)[/color][/size]'
TextInput:
id: _glucose_reading
hint_text: 'Current Blood Sugar'
BoxLayout:
Label:
size_hint_x: 0.22
bold: True
markup: True
text: '[size=40][color=0000ff]Carbs[/color][/size]'
TextInput:
id: _food
hint_text: 'Total Carbs for meal'
BoxLayout:
Label:
size_hint_x: 0.22
bold: True
markup: True
text: '[size=30][color=0000ff]Medications Taken[/color][/size]'
TextInput:
id: _meds_taken
hint_text: 'Please Enter Any Medications Taken'
Button:
size_hint_x: 0.15
text: 'Save'
on_press: root.save_entry()
Button:
size_hint_x: 0.15
text: 'Retrieve'
on_press: root.retrieve()
答案 0 :(得分:2)
with
内的retrieve
似乎是多余的。也许这种形式会更好:
def retrieve(self):
db = TinyDB('entry.json')
f = db.search(Query().time != 0)[0]
print f
您要求一种简单的方法来检索用户的最新血糖值。试试这个:
f = db.search(Query().time != 0)[-1]['glucose']
print f
或
f = db.search(Query().time != 0)[-1]
print f['glucose']
检索用户最近的五个葡萄糖值:
f=db.search(Query().time != 0)[-5:]
print ', '.join(str(x['glucose']) for x in f)