【发布时间】:2011-02-05 10:06:57
【问题描述】:
我想对 MySQL 数据库中的一列值进行迭代计算。我想知道 Django 是否有任何内置功能可以做到这一点。以前,我刚刚使用以下内容将每一列存储为名称为 table_column 的元组列表:
import MySQLdb
import sys
try:
conn = MySQLdb.connect (host = "localhost",
user = "user",
passwd="passwd",
db="db")
except MySQLdb.Error, e:
print "Error %d: %s" % (e.args[0], e.args[1])
sys.exit (1)
cursor = conn.cursor()
for table in ['foo', 'bar']:
for column in ['foobar1', 'foobar2']:
cursor.execute('select %s from %s' % (column, table))
exec "%s_%s = cursor.fetchall()" % (table, column)
cursor.close()
conn.commit()
conn.close()
Django 中是否有内置功能可以更方便地遍历数据库表中列的值?我正在处理数百万行,因此执行速度很重要。
[已解决] 谢谢大家。我使用了内置的迭代器,并结合了 values_list() 调用来优化性能。请注意,调用 values() 将返回 dicts,迭代速度很慢,而 values_list() 返回更快的元组。因此,例如,如果我想遍历 'foobar1' 列的每一行,在表 'foo' 中,我可以通过以下方式获取迭代器:
foobar1_iterator = foo.objects.values_list('foobar1').iterator()
假设我想遍历 i 以生成 'foobar1' 的所有行值的列表。然后简单地这样做:
foobar1_list = [i for i in foobar1_iterator]
【问题讨论】:
标签: python mysql database django