0

我在数据库中有一个 twitter 用户列表,r[0] 代表他们的 Twitter IDS。我想使用这些 ID 来查找他们关注者的用户 ID。

con = lite.connect('influence.db')
with con:
    cur = con.cursor()
    var = cur.execute("select * from users")
    for r in var :
        print r[0]
        result = tweepy.api.friends(r[0])
        for a in result:
            print I ," ", a.id," ",a.name, " ",a.followers_count," ",a.friends_count,"      ",a.statuses_count," "
            I = I + 1
            if a.followers_count>100000:
            cur.execute("INSERT or IGNORE into users1 values (%s,'%s',%s,%s,%s)" %    (convert(a.id),convert(a.name),convert(a.followers_count),convert(a.friends_count),convert(a.statuses_count)))
con.commit()

此代码不会针对数据库中的所有 ID 运行。仅适用于第一个 ID 并停止。我是 python 和 sqlite 的新手。我希望代码为所有 ID 运行。我错过了什么?

4

2 回答 2

1

你可以试试executemany,像这样:

con = lite.connect('influence.db')
cur = con.cursor()
var = cur.execute("select * from users")
data = []
for r in var :
    print r[0]
    result = tweepy.api.friends(r[0])
    for a in result:
        if a.followers_count>100000:
            data.append((convert(a.id), 
                         convert(a.name), 
                         convert(a.followers_count), 
                         convert(a.friends_count), 
                         convert(a.statuses_count)))

if data:
    strq = ','.join("?" for i in data[0])
    sql = 'insert or ignore into users1 values (%s)' % strq
    cur.executemany(sql, data)    
    con.commit()

con.close()
于 2013-04-30T22:20:33.017 回答
1

insert当您在循环中执行深度时,您正在重用光标。可以肯定的是,这将丢失原始查询中的剩余行。

有关批处理插入语句并在选择循环完成后一次运行它们的示例,请参阅python-2.7 中在 sqlite3 的嵌套循环中使用多个游标中的已接受答案。

于 2013-04-30T18:40:10.063 回答