当前位置:   article > 正文

python 读取列表指定列_python-有没有办法获取sqlite中的列名列表?

colnames = [col.name for col in cursor.description]

python-有没有办法获取sqlite中的列名列表?

我想从数据库中的表中获取列名列表。 使用编译指示,我会得到一个元组列表,其中包含很多不需要的信息。 有没有办法只获取列名? 所以我最终可能会遇到这样的事情:

[Column1,Column2,Column3,Column4]

之所以绝对需要此列表,是因为我想在列表中搜索列名并获取索引,因为很多代码中都使用了索引。

有没有办法得到这样的清单?

谢谢

11个解决方案

111 votes

您可以使用sqlite3和pep-249

import sqlite3

connection = sqlite3.connect('~/foo.sqlite')

cursor = connection.execute('select * from bar')

cursor.description是列的描述

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

另外,您可以使用列表推导:

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

smallredstone answered 2020-07-05T19:50:10Z

27 votes

smallredstone提供的cursor.description解决方案的另一种选择是使用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()

缺点:仅在查询返回至少一行时有效。

好处是:您可以按列名访问它们(row ['your_column_name'])

在python文档中阅读有关Row对象的更多信息。

flokk answered 2020-07-05T19:50:44Z

12 votes

据我所知Sqlite不支持INFORMATION_SCHEMA。 相反,它具有sqlite_master。

我认为您无法仅通过一条命令就能获得所需的列表。 您可以使用sql或pragma获取所需的信息,然后使用regex将其拆分为所需的格式

SELECT sql FROM sqlite_master WHERE name='tablename';

给你像

CREATE TABLE tablename(

col1 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,

col2 NVARCHAR(100) NOT NULL,

col3 NVARCHAR(100) NOT NULL,

)

或使用编译指示

PRAGMA table_info(tablename);

给你像

0|col1|INTEGER|1||1

1|col2|NVARCHAR(100)|1||0

2|col3|NVARCHAR(100)|1||0

wdavo answered 2020-07-05T19:51:21Z

7 votes

快速,互动的方式查看列名

如果您正在使用Python进行交互工作,并且只想快速“查看”列名,我会发现cursor.description可以正常工作。

import sqlite3

conn = sqlite3.connect('test-db.db')

cursor = conn.execute('select * from mytable')

cursor.description

输出如下所示:

(('Date', None, None, None, None, None, None),

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

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

或者,一种快速的方法来访问和打印它们。

colnames = cursor.description

for row in colnames:

print row[0]

输出如下所示:

Date

Object-Name

Object-Count

Joseph True answered 2020-07-05T19:51:59Z

5 votes

假设您知道表名,并且想要数据列的名称,那么可以使用列出的代码,这将以一种简单而优雅的方式满足我的口味:

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]

thebeancounter answered 2020-07-05T19:52:19Z

3 votes

您可以通过运行以下命令获取列名列表:

SELECT name FROM PRAGMA_TABLE_INFO('your_table');

name

tbl_name

rootpage

sql

您可以通过运行以下命令检查某个列是否存在:

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

1

参考:

[HTTPS://呜呜呜.SQLite.org/骗人啊干嘛.HTML#PR AG func]

user1461607 answered 2020-07-05T19:52:52Z

2 votes

我用这个:

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)

Luca Di Sabatino answered 2020-07-05T19:53:11Z

1 votes

我喜欢@thebeancounter的答案,但更喜欢参数化未知数,唯一的问题是表名被利用的漏洞。 如果您确定可以,那么可以这样做:

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]

如果有问题,您可以添加代码以清理表名。

4dummies answered 2020-07-05T19:53:36Z

0 votes

这很容易。

首先创建一个连接,命名为con。然后运行以下代码。

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)

您将获得列名作为列表

Atif answered 2020-07-05T19:54:05Z

0 votes

使用编译指示的另一种方法:

> table = "foo"

> cur.execute("SELECT group_concat(name, ', ') FROM pragma_table_info(?)", (table,))

> cur.fetchone()

('foo', 'bar', ...,)

user3342816 answered 2020-07-05T19:54:24Z

-1 votes

我不是sqlite用户,所以请带一点盐。 大多数RDBM都支持INFORMATION_SCHEMA视图的ANSI标准。 如果运行以下查询:

SELECT *

FROM INFORMATION_SCHEMA.columns

WHERE table_name = 'your table'

您应该获得一个表,该表列出了指定表中的所有列。 IT可能需要进行一些调整才能获得所需的输出,但是希望这是一个开始。

Stuart Ainsworth answered 2020-07-05T19:54:49Z

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/980488
推荐阅读
相关标签
  

闽ICP备14008679号