2012-06-13 36 views
0

我有一個PHP形式從而節省了這些值到數據庫中:的Python MySQLdb的數據

  • ID
  • 蘭特(隨機生成的字符串)
  • x_val
  • y_val

我在python程序中使用mysqldb從數據庫中調用這些值:

import MySQLdb 

db = MySQLdb.connect("localhost","root","","test") 

cursor = db.cursor() 

sql = "SELECT id,rand,x_val,y_val FROM table" 
try: 
cursor.execute(sql) 
results = cursor.fetchall() 
results = {} 
for row in results: 
    results[row[1]] = [row[0], row[2], row[3]] 
    rand = row[1] 
    x_val = row[2] 
    y_val = row[3] 

except: 
print "Error: unable to fecth data" 

db.close() 

UPDATE:它使錯誤 - >錯誤:無法fecth數據

在這片(你可以看到)我想蘭特(即行[1])作爲行的標識符。但是,我無法找到一種關於如何將此用作標識符的方法,因爲在SQL變量之後調用了rand = row [1]。在這個例子中,我使用了一個靜態的'63kfjf'rand值,它只是爲了向你展示工作。有沒有辦法?

+0

你能不能解釋一下?爲什麼你需要它是一個隨機字符串?爲什麼不把rand設爲「​​整數自動增量」? – JustinDanielson

+0

我需要它作爲python程序中行的唯一標識符進行處理......不需要它是id。 – khan

+0

將其設置爲「整數自動增量」,您將得到一串沒有任何匹配的數字。您不必將其用作關鍵。 – JustinDanielson

回答

1

從數據庫中選擇您的DATAS後,您可以創建一個「蘭特」值作爲鍵dictionnary:

事情是這樣的:

dicResults = {} 
for row in results: 
    dicResults[row[1]] = [row[0], row[2], row[3]] 
+0

明白了。通過你的方法得到它......工作正常。 – khan

+0

不客氣。 – Akarun

+3

@Akarun:你必須是一個心靈讀者 – mhawke

0

我想你想隨機選擇一行?如果這是正確的,這將起作用。

  1. 將rand更改爲自動遞增整數。

  2. SELECT MAX(RAND)FROM表;以確定最高的「隨機」值 值。

  3. 生成0和MAX(RAND)

  4. SELECT * FROM表之間的隨機值WHERE蘭特= $ randomGeneratedValue;

+0

蘭德是從一個PHP腳本生成的,它只是一個獨特的隨機代碼,來自表單的輸入字段。所以它總是獨一無二的,這就是爲什麼我要把它作爲可以在python腳本中進一步處理的標識符的原因。另外,把rand = $ randomGeneratedValue可能不會做任何事情,因爲這個python腳本與php變量沒有關係。這裏有兩種不同的腳本。一個發佈數據,另一個發現數據。 :/ – khan