2012-06-13 39 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