3

与此问题相关:

MySQL 的列名中的通配符

基本上,将有可变数量的列名称为“word”。

我想知道的是,对每一行进行单独的数据库调用(通过从信息模式中获取列信息),每行生成一个 Python 查询会更快,还是简单地选择 * 会更快,并且只使用我需要的列?可以说SELECT * NOT XYZ吗?据我所知,不,没有办法专门排除列。

一开始不会有很多不同的行——只有三个。但是这有可能无限行。这基本上取决于我们想在我们的网站上放置多少不同类型的搜索查询。我们的整体可扩展性基于扩展行数。

4

1 回答 1

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]

for row in cursor.fetchall()根据您的 MySQL python 模块,您可能必须改用。

于 2012-07-13T09:06:23.677 回答