Maison >base de données >tutoriel mysql >Comment récupérer efficacement des dictionnaires à partir de requêtes SQLite ?

Comment récupérer efficacement des dictionnaires à partir de requêtes SQLite ?

DDD
DDDoriginal
2025-01-03 22:57:431016parcourir

How to Efficiently Retrieve Dictionaries from SQLite Queries?

Récupération de dictionnaires à partir de requêtes SQLite

Dans l'extrait de code fourni, vous parcourez actuellement les tuples bruts renvoyés par la requête SQLite :

db = sqlite.connect("test.sqlite")
res = db.execute("select * from table")

Cela renvoie une liste de tuples pour chaque ligne du tableau, ce qui nécessite de le faire manuellement extraire les noms de colonnes et construire des dictionnaires. Cependant, SQLite propose deux méthodes pour obtenir des dictionnaires directement à partir de requêtes :

1. row_factory

L'option row_factory vous permet de spécifier une fonction personnalisée utilisée pour créer un objet à partir de chaque ligne. Par exemple, la fonction suivante renvoie un dictionnaire :

def dict_factory(cursor, row):
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d

En définissant l'option row_factory sur cette fonction, chaque ligne renvoyée par la requête sera un dictionnaire :

con = sqlite3.connect(":memory:")
con.row_factory = dict_factory
cur = con.cursor()
cur.execute("select 1 as a")
result = cur.fetchone()  # Returns {'a': 1}

2. sqlite3.Row

Vous pouvez également définir row_factory sur sqlite3.Row, qui fournit un accès basé sur l'index et le nom aux colonnes sans aucune surcharge de mémoire supplémentaire :

con = sqlite3.connect(...)
con.row_factory = sqlite3.Row
cursor = con.cursor()
result = cursor.fetchone()  # Returns Row object with attribute-like access

En utilisant l'une ou l'autre de ces méthodes, vous pouvez facilement obtenir des dictionnaires ou des objets accessibles aux attributs à partir de requêtes SQLite, éliminant ainsi le besoin de construction manuelle de dictionnaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn