¿Hay alguna manera de obtener una lista de nombres de columnas en sqlite?

Quiero obtener una lista de nombres de columna de una tabla en una base de datos. Al usar pragma, obtengo una lista de tuplas con mucha información innecesaria. ¿Hay una manera de obtener sólo los nombres de columna? Así que podría terminar con algo como esto:

[Columna1, Columna2, Columna3, Columna4]

La razón por la que absolutamente necesito esta lista es porque quiero buscar un nombre de columna en la lista y obtener el índice porque el índice se usa en muchos de mis códigos.

¿Hay alguna manera de obtener una lista como esta?

Gracias

Puedes usar sqlite3 y pep-249

import sqlite3 connection = sqlite3.connect('~/foo.sqlite') cursor = connection.execute('select * from bar') 

cursor.description es descripcion de columnas

 names = list(map(lambda x: x[0], cursor.description)) 

Alternativamente, podrías usar una lista de comprensión:

 names = [description[0] for description in cursor.description] 

Una alternativa a la solución cursor.description de smallredstone podría ser usar row.keys () :

 import sqlite3 connection = sqlite3.connect('~/foo.sqlite') connection.row_factory = sqlite3.Row cursor = connection.execute('select * from bar') # instead of cursor.description: row = cursor.fetchone() names = row.keys() 

El inconveniente: solo funciona si hay al menos una fila devuelta por la consulta.

El beneficio: puede acceder a las columnas por su nombre (fila [‘your_column_name’])

Lea más acerca de los objetos Fila en la documentación de python .

Hasta donde puedo decir, Sqlite no es compatible con INFORMATION_SCHEMA. En su lugar, tiene sqlite_master.

No creo que pueda obtener la lista que desea con un solo comando. Puede obtener la información que necesita usando sql o pragma, luego use regex para dividirla en el formato que necesita

 SELECT sql FROM sqlite_master WHERE name='tablename'; 

te da algo como

 CREATE TABLE tablename( col1 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, col2 NVARCHAR(100) NOT NULL, col3 NVARCHAR(100) NOT NULL, ) 

O usando pragma

 PRAGMA table_info(tablename); 

te da algo como

 0|col1|INTEGER|1||1 1|col2|NVARCHAR(100)|1||0 2|col3|NVARCHAR(100)|1||0 

Forma rápida e interactiva de ver los nombres de las columnas.

Si estás trabajando de forma interactiva en Python y solo quieres “ver” rápidamente los nombres de las columnas, encontré que el cursor.description funciona.

 import sqlite3 conn = sqlite3.connect('test-db.db') cursor = conn.execute('select * from mytable') cursor.description 

Produce algo como esto:

 (('Date', None, None, None, None, None, None), ('Object-Name', None, None, None, None, None, None), ('Object-Count', None, None, None, None, None, None)) 

O bien, forma rápida de acceder e imprimirlos.

 colnames = cursor.description for row in colnames: print row[0] 

Produce algo como esto:

 Date Object-Name Object-Count 

Suponiendo que conoce el nombre de la tabla y desea los nombres de las columnas de datos que puede usar, el código que aparece en la lista lo hará de una manera simple y elegante a mi gusto:

 import sqlite3 def get_col_names(): #this works beautifully given that you know the table name conn = sqlite3.connect("t.db") c = conn.cursor() c.execute("select * from tablename") return [member[0] for member in c.description] 

Yo uso esto:

 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) 

Me gusta la respuesta de @thebeancounter, pero prefiero parametrizar las incógnitas, ya que el único problema es una vulnerabilidad a las vulnerabilidades en el nombre de la tabla. Si estás seguro de que está bien, entonces esto funciona:

 def get_col_names(cursor, tablename): """Get column names of a table, given its name and a cursor (or connection) to the database. """ reader=cursor.execute("SELECT * FROM {}".format(tablename)) return [x[0] for x in reader.description] 

Si es un problema, podría agregar código para sanear el nombre de la tabla.

Puede obtener una lista de nombres de columna ejecutando:

 SELECT name FROM PRAGMA_TABLE_INFO('your_table'); name tbl_name rootpage sql 

Puedes verificar si existe una determinada columna ejecutando:

 SELECT 1 FROM PRAGMA_TABLE_INFO('your_table') WHERE name='sql'; 1 

Referencia:

https://www.sqlite.org/pragma.html#pragfunc

Es muy fácil.
Primero crea una conexión, vamos a nombrarla, con . A continuación, ejecute el siguiente código.

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

Obtendrá el nombre de la columna como una lista

No soy un usuario de sqlite, así que toma esto con un grano de sal; la mayoría de las RDBM admiten el estándar ANSI de las vistas INFORMATION_SCHEMA. Si ejecuta la siguiente consulta:

 SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'your table' 

Debería obtener una tabla que enumera todas las columnas en su tabla especificada. Puede tomar algunos ajustes para obtener la salida que desea, pero es de esperar que sea un comienzo.