python: MYSQLdb. 如何在大表中不执行 select * 的情况下获取列名?

12 投票
5 回答
44637 浏览
提问于 2025-04-18 07:12

我想获取一个表格的列名,但里面有超过一百万条数据。

所以我不能用:

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中这样不行。有没有人知道该怎么做?

5 个回答

0
data = pd.read_sql("""SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TABLE_NAME'""", conn)
print(data.COLUMN_NAME)

在建立连接之后,我们利用信息架构来获取列名,而不需要提取任何数据记录。

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

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

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

试试这个

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),)
8

正确的做法是使用 "SHOW columns FROM table_name" 这个命令,不过你也可以在你现有的查询中加一个 LIMIT 来限制结果的数量:

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

你可以使用 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()]

撰写回答