循环遍历mysql数据库中的所有表

时间:2016-11-07 20:05:19

标签: python mysql mysql-python

我是MySQL的新手,我需要一些帮助。我正在使用MySQL连接器编写脚本。

我有数据库包含7K表,我试图从其中一些表中选择一些值

cursor.execute( "SELECT SUM(VOLUME) FROM stat_20030103 WHERE company ='Apple'")
for (Volume,) in cursor:
print(Volume)

这适用于一个表,例如(stats_20030103)。但是我想总结所有表的所有数量.startwith(stats_2016)公司名称是Apple。我如何循环我的桌子?

3 个答案:

答案 0 :(得分:1)

我不是MySQL的专家,但在python中这里有一些快速而简单的东西:

# Get all the tables starting with "stats_2016" and store them
cursor.execute("SHOW TABLES LIKE 'stats_2016%'")
tables = [v for (v, ) in cursor]

# Iterate over all tables, store the volumes sum
all_volumes = list()
for t in tables:
    cursor.execute("SELECT SUM(VOLUME) FROM %s WHERE company = 'Apple'" % t)
    # Get the first row as is the sum, or 0 if None rows found
    all_volumes.append(cursor.fetchone()[0] or 0)

# Return the sum of all volumes
print(sum(all_volumes))

答案 1 :(得分:0)

您可以使用select * from information_schema.tables将所有表名称添加到查询中。

答案 2 :(得分:0)

我会尝试离开加入。

SELECT tables.*, stat.company, SUM(stat.volume) AS volume 
    FROM information_schema.tables AS tables LEFT JOIN mydb.stat_20030103 AS stat 
    WHERE tables.schema = "mydb" GROUP BY stat.company;

这将立即为您提供所有结果。也许MySQL不支持从metatables加入,在这种情况下你可以选择它进入临时表。

CREATE TEMPORARY TABLE mydb.tables SELECT name FROM information_schema.tables WHERE schema = "mydb"

请参阅MySQL doc on information_schema.table