当我从Firebase实时为我的电报机器人收集数据时,数据重复



我收集我的数据从Firebase实时数据库电报机器人与按钮和它的显示完美,但当我点击按钮一次数据只是重复本身,但不更新

数据收集代码:

firebase = pyrebase.initialize_app(firebaseConfig)
db = firebase.database()
result = []
maps = db.child().get()
def collect_maps():
for map in maps.each():
id = db.child(map.key()).child('id').get()
name = db.child(map.key()).child('name').get()
longitude = db.child(map.key()).child('longitude').get()
latitude = db.child(map.key()).child('latitude').get()
result.append(
{
'id': id.val(),
'name': name.val(),
'longitude': longitude.val(),
'latitude': latitude.val()
}
)
return result

消息处理程序代码:

@dp.message_handler(Text(equals='Get Maps'))
async def get_maps(message: types.Message):
await message.answer('Please wait a bit...')

data = collect_maps()
keyboard = types.InlineKeyboardMarkup()
key = types.InlineKeyboardButton('Get Location', callback_data='Get Location')
keyboard.add(key)
user_id = message.from_user.id
await message.answer('Your maps, that i collected:')
for index, item in enumerate(data):
card = f'{index+1}) {item.get("id")} - {item.get("name")}n' 
f'Longitude: {item.get("longitude")}n' 
f'Latitude: {item.get("latitude")}n'
await message.answer(card, reply_markup=keyboard)

只需将数据库var放入函数

即可解决此问题。
def collect_maps():
db = firebase.database()
result = []
maps = db.child().get()
for map in maps.each():
id = db.child(map.key()).child('id').get()
name = db.child(map.key()).child('name').get()
longitude = db.child(map.key()).child('longitude').get()
latitude = db.child(map.key()).child('latitude').get()
result.append(
{
'id': id.val(),
'name': name.val(),
'longitude': longitude.val(),
'latitude': latitude.val()
}
)
return result

最新更新