我想根据我的输入值PostgresSQL从数据库中获取输出值

时间:2019-11-30 16:50:53

标签: python sql database postgresql

我已经在数据库中设置了一个表,在该表中针对其输入和值元组设置了输出值,例如,我的输入使用字符串“ Calculation_score”评分,并且在数据库中,针对此字符串设置了值就是“ 10”。

**Table :**

**input**            **value**            **output value**

scoring                 Calculation_score         10
scoring                 Credit_score              20
scoring                 Monthly_score             30
scoring                 weekly_score              5

我的代码:

import psycopg2

value = "Calculation_score"
input = "scoring"
con = psycopg2.connect(database="myDB", user="postgres", password="admin", host="localhost", port="5432")
cur = con.cursor()


result = cur.execute("""SELECT input, input_type, value, output FROM value_rules WHERE input = :input
AND value = :value""", {"input": input, "value": value}).fetchone()

print(result)
return result['output']

我正在从python查询数据库以获取我的输出值,即使我使用“ ==”代替“:”,我也不明白该查询出了什么问题,这给了我错误(在下面)。 / p>

Traceback (most recent call last):
    """, {"input": input, "value": value}).fetchone()
psycopg2.ProgrammingError: syntax error at or near ":"
LINE 4: WHERE input = :input
                      ^

2 个答案:

答案 0 :(得分:1)

尝试一下

import psycopg2

value = "Calculation_score"
input = "monthly_inquiries"
con = psycopg2.connect(database="myDB", user="postgres", password="admin", host="localhost", port="5432")
cur = con.cursor()

 cur.execute("SELECT input, input_type, value, output FROM value_rules WHERE input = %s
AND value = %s;", (input, value)) 

result = cur.fetchone()

    print(result)

实际上,execute不会获取行,我们必须使用游标(cur)来获取

答案 1 :(得分:1)

您可以更具体地设置查询语句,并使用参数化查询添加预期的格式字符s,如下所示

>>> # example
>>> q = 'SELECT id, name FROM customer WHERE id = %(cid)s;'
>>> cursor.execute(q, {'cid': 1})
>>> cursor.query
    b'SELECT id, name FROM customer WHERE id = 1;'

>>> # so in your case you can do 
>>> q = 'SELECT input, input_type, value, output FROM value_rules WHERE input = %(input)s AND value = %(value)s' 
>>> cursor.execute(q, {'input': 'Calculation_score', 'value': 'scoring' })

docs here

上查看更多