蟒蛇:MYSQLdb。如何在不执行 select * 在大表中获取列名?

Posted

技术标签:

【中文标题】蟒蛇:MYSQLdb。如何在不执行 select * 在大表中获取列名?【英文标题】:python: MYSQLdb. how to get columns name without executing select * in a big table? 【发布时间】:2014-07-10 07:14:05 【问题描述】:

我想获取一个表的列名,但其中有超过一百万的数据。 所以我不能使用:

cursor.execute("SELECT * FROM table_name")
print cursor.description

在 sqlite3 中,我是这样做的

crs.execute("PRAGMA table_info(%s)" %(tablename[0]))
for info in crs:
    print info

但这在 python mysqldb 中不起作用。有人知道怎么做吗?

【问题讨论】:

show columns from <table name>; 那你值得一票。 【参考方案1】:

你可以使用SHOW columns:

cursor.execute("SHOW columns FROM table_name")
print [column[0] for column in cursor.fetchall()]

仅供参考,这与使用desc 基本相同:

cursor.execute("desc table_name")
print [column[0] for column in cursor.fetchall()]

【讨论】:

它是column[0],而不是columns[0]。我无法编辑代码,因为编辑少于 6 个字符。【参考方案2】:

执行此操作的正确方法是使用"SHOW columns FROM table_name",但是,您也可以简单地将LIMIT 添加到现有查询中:

cursor.execute("SELECT * FROM table_name LIMIT 0")
print cursor.description

【讨论】:

与“SHOW COLUMNS”或“DESCRIBE”或“SHOW CREATE TABLE”相比,它的好处是您还可以将它用于假表,例如“SHOW PROCESSLIST”的结果【参考方案3】:

试试

cursor.execute("SELECT * FROM table_name LIMIT 1")

cursor.execute("SELECT * FROM table_name WHERE 1=0")

两者都可以防止大量数据受到干扰。第二个可能更优雅。 我刚刚检查过,即使这样也有效:

>>>cursor.execute("SELECT LEFT(long_text,5) as short_text FROM table_name WHERE 1=0")
>>>print cursor.description
(('short_text', 253, 0, 5, 5, 31, 0),)

【讨论】:

LIMIT = 1 将返回单行。如果要返回列标题并随后显示几行数据,可以遍历 cursor.description,它是一个元组的元组,如: print("\t".join([column[0] for cursor.description 中的列]))【参考方案4】:
cursor.execute("SELECT * FROM table_name LIMIT 0")
cursor.column_names

使用以下内容查找其他信息

[v for v in dir(cursor) if v.find("_")]

【讨论】:

【参考方案5】:
data = pd.read_sql("""SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TABLE_NAME'""", conn)
print(data.COLUMN_NAME)
创建连接后,使用信息模式,我们调用提取列名而不提取任何观察结果。

【讨论】:

社区鼓励在代码中添加解释,而不是纯粹基于代码的答案(参见here)。

以上是关于蟒蛇:MYSQLdb。如何在不执行 select * 在大表中获取列名?的主要内容,如果未能解决你的问题,请参考以下文章

使用 MySQLdb 执行“SELECT ... WHERE ... IN ...”

Python MySQLdb没有插入数据

如何从字典中选择多行(executemany select)

如何在 Python 中将日期传递给 MySQLdb?

如何使用 Python 将变量传递给 MySQLdb 查询?

从 mysqldb 查询中获取原始十进制值