我想从一个PostgreSQL数据库检索一个变量中的值使用WHERE子句,但我收到一个错误。在PostgreSQL中的SELECT查询
查询是:
select age into x from employee where name=name.GetValue()
name
是其中我进入从wxPython的GUI的值textcontrol。
由于名称架构不存在,导致出现错误。
什么是检索值的正确方法?
我想从一个PostgreSQL数据库检索一个变量中的值使用WHERE子句,但我收到一个错误。在PostgreSQL中的SELECT查询
查询是:
select age into x from employee where name=name.GetValue()
name
是其中我进入从wxPython的GUI的值textcontrol。
由于名称架构不存在,导致出现错误。
什么是检索值的正确方法?
我还不能肯定你正在尝试做的,但我觉得你的问题可能是语法(INTO而不是作为误用):
SELECT age AS x FROM employee WHERE name = ....
“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分配给该行中的第一个项目。
我仍然收到一个错误 - (psycopg2.ProgrammingError:操作符不存在:字符变化=?) 有没有其他方法可以解决这个问题? – Black
是的,psycopg使用%s样式参数绑定,而不是?,我编辑了我的答案以反映这一点。注意,执行行与cur.execute(“select employee from employee where name =%s”%name.GetValue())'不一样,使用字符串插值(%运算符)会打开SQL注入。 – Steve