103 votes

Y a-t-il un moyen d'obtenir une liste de noms de colonnes dans sqlite?

Je veux obtenir une liste des noms de colonnes d'une table dans une base de données. En utilisant pragma, j'obtiens une liste de tuples avec beaucoup d'informations inutiles. Existe-t-il un moyen d'obtenir uniquement les noms des colonnes? Ainsi, je pourrais obtenir quelque chose comme ceci:

[Colonne1, Colonne2, Colonne3, Colonne4]

La raison pour laquelle j'ai absolument besoin de cette liste est que je veux rechercher un nom de colonne dans la liste et obtenir l'indice car l'indice est utilisé dans beaucoup de mon code.

Existe-t-il un moyen d'obtenir une liste comme celle-ci?

Merci

9voto

thebeancounter Points 705

En supposant que vous connaissez le nom de la table et que vous voulez connaître les noms des colonnes de données, vous pouvez utiliser le code répertorié ci-dessous pour le faire d'une manière simple et élégante à mon goût :

import sqlite3

def get_col_names():
#cela fonctionne magnifiquement si vous connaissez le nom de la table
    conn = sqlite3.connect("t.db")
    c = conn.cursor()
    c.execute("select * from tablename")
    return [member[0] for member in c.description]

9voto

Atif Points 672

C'est très facile.
Premièrement, créez une connexion, appelons-la con. Ensuite, exécutez le code suivant.

cur =con.cursor()
cur.execute("select * from table_name limit 1")
col_name=[i[0] for i in cur.description]
print(col_name)

Vous obtiendrez le nom des colonnes sous forme de liste

4voto

Don'tAccept Points 4720

Eh bien, je peux être très en retard pour répondre à cela, mais étant donné que des gens suivent encore ce fil de discussion, je voulais simplement partager comment je procède pour obtenir la liste des noms de colonnes en python sqlite3.

import sqlite3

def getVarList(con, tableName)
    return [fields[1] for fields in con.execute(f"PRAGMA table_info({tableName})").fetchall()]

conn = sqlite3.connect('foo.db')
varList = getVarList(conn, 'bar')

2voto

Luca Di Sabatino Points 109

J'utilise ceci :

import sqlite3

    db = sqlite3.connect('~/foo.sqlite')
    dbc = db.cursor()
    dbc.execute("PRAGMA table_info('bar')"
    ciao = dbc.fetchall()

    HeaderList=[]
    for i in ciao:
        counter=0
        for a in i:
            counter+=1
            if( counter==2):
                HeaderList.append(a)

print(HeaderList)

1voto

4dummies Points 161

J'aime la réponse de @thebeancounter, mais je préfère paramétrer les inconnus, le seul problème étant une vulnérabilité aux exploits sur le nom de la table. Si vous êtes sûr que tout va bien, alors cela fonctionne :

def get_col_names(cursor, tablename):
    """Obtenir les noms des colonnes d'une table, en donnant son nom et un curseur (ou une connexion) à la base de données.
    """
    reader=cursor.execute("SELECT * FROM {}".format(tablename))
    return [x[0] for x in reader.description] 

Si c'est un problème, vous pourriez ajouter du code pour assainir le nom de la table.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X