1

I'm new to TinyDB, and new to Python.

I have various usernames stored in a TinyDB database, they also have other information stored (age, email addresses etc), however, I wish to return all the usernames only.

{"_default": {"1": {"Username": "John", "Age": "30"}, "2": {"Username": 
"Andrew", "Age":"40", "Email": "example@example.com"}}}

My GUI would have the button "Show all usernames".

I can return information about specific users, and I can get all the information stored in the database (db.all()), however I cannot just seem to get all the usernames from the entire database.

Is there a way to do this?

Or am I looking at this problem the wrong way.

Many thanks!

4

2 回答 2

1

The database itself is iterable, so perhaps this would be more elegant and would avoid having to open the JSON file directly:

db = TinyDB('database_name.json')

usernames = [r['Username'] for r in db]

Gives:

['John', 'Andrew']
于 2018-11-11T10:12:52.353 回答
0

Update: I found a (slightly convoluted) workaround.

It involves reading the file as a JSON file and then looping through the dictionary IDs, stopping the loop upon a key error.

with open("database_name.json", "r") as read_file:
data=json.load(read_file)

try:
    current_number = 1
    while current_number <=100000000000:
        current_number = str(current_number)
        print(data['_default'][current_number]['Username'])
        current_number = int(current_number)
        current_number += 1
except:
    KeyError
于 2018-11-11T09:44:04.717 回答