Python MySQLdb迭代表

Dav*_*dJB 13 python mysql mysql-python

我有一个MSQL数据库,我需要遍历一个表并在满足WHERE子句后执行操作.然后一旦到达桌子的尽头,返回顶部并重新开始.

目前我有

cursor = database.cursor()    
cursor.execute("SELECT user_id FROM round WHERE state == -1 AND state = 2")  
round_id = cursor.fetchone()

if round != 5
   ...do stuff
Run Code Online (Sandbox Code Playgroud)

在循环中但这显然只是循环第一个条目.我想你需要使用for in函数来读取表格,但我不确定如何使用mysqldb完成这个操作?

Dvd*_*ins 12

一旦光标中有结果,就可以在其中进行迭代.

cursor = database.cursor()    
cursor.execute("SELECT user_id FROM round WHERE state == -1 AND state = 2")  
for round in cursor:
  if round[0] != 5
    ...do stuff
Run Code Online (Sandbox Code Playgroud)


Jas*_*ske 8

这会将光标设置在结果集的开头并告诉你它返回了多少行(我在这一行上来回走动,但这我发现的最权威的文档,旧的Python MySQLdb lib在执行时返回rowcount ,但Python数据库API规范v2.0没有,这应该是最兼容的)

cursor.execute("SELECT user_id FROM round WHERE state = -1 OR state = 2")
numrows = cursor.rowcount
Run Code Online (Sandbox Code Playgroud)

会告诉你你得到了多少行

for x in xrange(0,numrows):
  row = cursor.fetchone()
  print row[0], "-->", row[1]
Run Code Online (Sandbox Code Playgroud)

迭代每一行(不需要用范围枚举x)

  • 值得注意的是查询是错误的 (3认同)
  • 现在它只是不可能:) (3认同)
  • 对于大型表,"for x in xrange(0,numrows)"xrange是生成器,而range创建一个列表对象,需要时间和内存用于大数 (3认同)