2012-06-19 42 views
1

我想从一个PostgreSQL数据库检索一个变量中的值使用WHERE子句,但我收到一个错误。在PostgreSQL中的SELECT查询

查询是:

select age into x from employee where name=name.GetValue() 

name是其中我进入从wxPython的GUI的值textcontrol。

由于名称架构不存在,导致出现错误。

什么是检索值的正确方法?

回答

1

我还不能肯定你正在尝试做的,但我觉得你的问题可能是语法(INTO而不是作为误用):

SELECT age AS x FROM employee WHERE name = .... 
5

“name.GetValue()”是字面字符串,你发送到你的db,它对wxpython一无所知,对你的程序中的变量一无所知。您需要将该数据的值发送到您的数据库,可能使用绑定参数。类似于:

cur.execute("select age from employee where name=%s", [name.GetValue()]) 
x = cur.fetchone()[0] # returns a row containing [age] from the db 

可能是您所追求的。这将在数​​据库中创建一个带有占位符的查询,然后将name.GetValue()的值绑定到该占位符并执行查询。下一行读取查询结果的第一行,并将x分配给该行中的第一个项目。

+0

我仍然收到一个错误 - (psycopg2.ProgrammingError:操作符不存在:字符变化=?) 有没有其他方法可以解决这个问题? – Black

+1

是的,psycopg使用%s样式参数绑定,而不是?,我编辑了我的答案以反映这一点。注意,执行行与cur.execute(“select employee from employee where name =%s”%name.GetValue())'不一样,使用字符串插值(%运算符)会打开SQL注入。 – Steve