使用python将var输入到insert中

使用python将var输入到insert中,python,postgresql,Python,Postgresql,我正在使用python 2.7和postgresql 10.0 出于学习目的,我试图获取用户原始输入并将其放入insert-execute,但无论我做什么,都会收到错误,可能是%s或{}并使用.format。 除年龄(int)外,所有值均为字符串 具体地 with conn: c.execute("INSERT INTO people(person_first, person_last, person_email, person_age) VAL

我正在使用python 2.7和postgresql 10.0

出于学习目的,我试图获取用户原始输入并将其放入insert-execute,但无论我做什么,都会收到错误,可能是%s或{}并使用.format。 除年龄(int)外,所有值均为字符串

具体地

    with conn:
        c.execute("INSERT INTO people(person_first, person_last, person_email, 
            person_age) VALUES ({}, {}, {}, {})".format(person_first, person_last, 
            person_email, person_age))
提供非字符串值(来自输入)

并且%s方法在第一个“%”值(%s,%s,%s,%s)处给我一个错误


也有尝试值(?,?,?)和类似于%s的不成功值粘贴的代码看起来是错误的。您有
与conn
c.execute
。假设
c
是光标,
conn
是连接,使用它们的方式如下:
将conn.cursor()作为c:
。光标是一个上下文管理器,当
with
块退出时,它将正确地清理自身

另外,不要养成在SQL上使用
.format()
的习惯。这将1)是SQL注入漏洞的向量,2)如果输入包含一个单引号字符,它将中断

因此,结合这两点,您的代码应该如下所示:

with conn.cursor() as c:
    c.execute("INSERT INTO people(person_first, person_last, person_email, 
        person_age) VALUES (%s, %s, %s, %s)", (person_first, person_last, 
        person_email, person_age,))
请注意,参数作为元组直接传递给
execute
;驱动程序将解析查询、转换为服务器的适当SQL/参数、管理引用等。如果仍然看到错误,请发布回溯

另见-


希望这能有所帮助。

See它给出了一个带有占位符值的插入示例。您不应该包含执行分号吗?试试单引号,比如。。值('{}','{}','{}','{}','{}');“.格式(等)