Problème d'indexation dans TinyDB lors de la sauvegarde
Bonjour,
J'ai un soucis avec une base de données TinyDB.
Lorsque que je sauvegarde ma base de données, j'ai un index qui se créer entre le nom de ma base est le dictionnaire que j'enregistre qui me pose problème par la suite. Ci-après ma fonction d'enregistrement (table => Query => Insert si non existant => Passage par json pour avoir une identation)
def save(self):
data_to_save = vars(self)
print(data_to_save)
db = TinyDB('db.json')
my_table = db.table('table_contact')
user = Query()
if not my_table.search(user.name == self.name):
my_table.insert(data_to_save)
print("Enregistrement ajouté.")
with open('db.json', 'r') as f:
data = json.load(f)
with open('db.json', 'w') as f:
json.dump(data, f, indent=4)
La variable data_to_save est bien un dictionnaire (ci-après le resultat du print de la variable) :
Mais mon fichier Json ressort ainsi :
{
"table_contact": {
"1": {
"indicatif": "D8KOP",
"mail": "[email protected]",
"band": "17m",
"band_rx": "17m",
"freq": "18.1014",
"qsl_date": "20240304",
"qsl_time": "1743",
"name": "Michel Barnier"
}
}
}
Je comprends avec mes recherches sur le net que cela n'est pas le fonctionnement normal de TinyDB qui ne crée pas d'index naturellement et que cela provient probablement de mes datas mais je passe un dictionnaire alors je ne comprends pas. Pourriez-vous m'aider ?
Salut Bertrand !
Ton problème semble venir du fait que TinyDB, par conception, ajoute automatiquement un champ identifiant (l'index que tu vois) à chaque entrée insérée. Cela lui permet de gérer facilement l'accès et la manipulation des documents.
Ici puisque tu ne le définis pas, c'est un chiffre qui est incrémenté par défaut.
Si tu souhaites sauvegarder tes données d'une autre manière, sans les indices auto-générés, tu peux choisir le nom de ton index.
Vois le comme un dictionnaire, où tu as une clé et une valeur.
La clé correspond à l'index (ici auto-généré car non précisé) et qui sert à accéder plus facilement à la donnée et la manipuler.
Et la valeur correspond aux informations que tu as mise à l'intérieur, dans ton cas ce qui semble être les informations d'un client / utilisateur.
En espérant que cela t'aide !
Kévin.
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte