2015-09-21 55 views
1

我在0-100之間生成N個隨機數。 N依賴於table_1中的行數。有200排。我在返回的列表中得到200個隨機數。綁定數不正確SQL

我試圖從列表中將這200個數字作爲單獨的行插入到table_2的random_number列中。隨機數字與table_2中的其他3列之間沒有關聯。

r = [random.randint(0,100) for rows in cursor.execute('SELECT * FROM table_1')] 
for r in rows: 
     cursor.execute('UPDATE table_2 SET random_number = (?)', r) 

這是我現在擁有的。我得到一個

ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 4 supplied

錯誤。我已經看到他們廣告(?,)的其他解決方案,但它不起作用。我也試過:

 r = [random.randint(0,100) for rows in cursor.execute('SELECT * FROM table_1')] 
     r = str(r) 

     cursor.execute('INSERT INTO table_2 (random_number) VALUES (?)', [','.join(r)]) 

哪個正在運行,但沒有任何內容被插入到random_number列中。

+0

你不覆蓋你的'r'變量? – hjpotter92

回答

0

我已經解決了我的問題。我注意到它正在分割並將整數保存到新行中。

這是我如何解決它:

  rows = cursor.execute('SELECT * FROM table_1').fetchall() 
      r_list = [random.randint(0,100) for row in rows] 

      for i in xrange(0,len(rows)): 
         cursor.execute('UPDATE table_2 SET random_number=' + str(r_list[i]) + ' WHERE row_id = ' + str(rows[i][0])) 
3

我認爲問題在於,當您在for循環中訪問行時,行不再處於範圍之內,也不是您想要迭代的列表。

如果我理解正確,那麼你應該改變你的腳本弄成這個樣子:

# generate random list 
r_list = [random.randint(0,100) for rows in cursor.execute('SELECT * FROM table_1')] 

# iterate over that list and insert 
for r in r_list: 
     cursor.execute('INSERT INTO table_2 (random_number) VALUES (?)', r) 
+1

另外:'UPDATE'是錯誤的操作,即使它不是這樣,每次迭代都會更新table_2中的所有*行。 –

+0

@EmilVikström是的,我忘了改變,我編輯我的答案插入 –

+0

感謝您的回答。我現在得到錯誤:ValueError:參數是不受支持的類型。這是因爲當r_list的值是str時它期望int嗎?我還沒有爲random_number列指定數據類型 – user47467