与此问题相关:
Wildcards in column name for MySQL
基本上,将有可变数量的列,其中包含名称“word”。
我想知道的是,为每一行执行单独的数据库调用(通过从信息模式中获取列信息),每行生成一次Python查询,或者简单地更快SELECT *,只使用我需要的列?有可能说SELECT * NOT XYZ
吗?据我所知,不,没有办法专门排除列。
最初不会有很多不同的行 - 只有三行。但是这里有无限行的潜力。它基本上取决于我们想要在我们的网站上放置多少种不同类型的搜索查询。我们的整体可扩展性基于扩展行数。
答案 0 :(得分:1)
如果你所做的只是限制返回的列数,则不需要进行动态查询。数据库的艰苦工作是选择与WHERE
子句匹配的行;向你发送10列中的5列或全部10列没什么区别。
只需使用" SELECT * FROM ..."并使用Python从结果集中挑选出列。您只需使用一个查询到数据库,因此MySQL只需要工作一次,然后过滤掉您的列:
cursor.execute('SELECT * FROM ...')
cols = [i for i, col in enumerate(cursor.description) if col[0].startswith('word')]
for row in cursor:
columns = [row[c] for c in cols]
根据您的MySQL python模块,您可能必须使用for row in cursor.fetchall()
。