Maison >base de données >tutoriel mysql >Comment puis-je récupérer efficacement des dictionnaires au lieu de listes à partir de requêtes SQLite ?

Comment puis-je récupérer efficacement des dictionnaires au lieu de listes à partir de requêtes SQLite ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-04 02:18:41843parcourir

How Can I Efficiently Retrieve Dictionaries Instead of Lists from SQLite Queries?

Obtention de dictionnaires à partir de requêtes SQLite

Récupérer des données à partir de bases de données SQLite implique d'obtenir des listes correspondant à des lignes. Bien qu'il soit possible de déterminer les noms de colonnes à l'aide de l'attribut description, la conversion des résultats en dictionnaires nécessite un effort supplémentaire.

Solution utilisant row_factory

Le paramètre row_factory permet le personnalisation de la façon dont les lignes sont renvoyées. En le définissant sur une fonction qui prend un curseur et une ligne comme arguments et renvoie un dictionnaire, vous pouvez obtenir des dictionnaires au lieu de listes.

import sqlite3

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

con = sqlite3.connect(":memory:")
con.row_factory = dict_factory
cur = con.cursor()
cur.execute("select 1 as a")
print(cur.fetchone()["a"])

Solution utilisant sqlite3.Row

La documentation SQLite recommande d'utiliser le type sqlite3.Row, qui fournit un accès efficace basé sur le nom aux colonnes. En définissant row_factory sur sqlite3.Row, vous pouvez à la fois indexer et accéder aux colonnes par nom.

con = sqlite3.connect(...)
con.row_factory = sqlite3.Row   # add this row
cursor = con.cursor()

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