使用python将var输入到insert中
我正在使用python 2.7和postgresql 10.0 出于学习目的,我试图获取用户原始输入并将其放入insert-execute,但无论我做什么,都会收到错误,可能是%s或{}并使用.format。 除年龄(int)外,所有值均为字符串 具体地使用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
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它给出了一个带有占位符值的插入示例。您不应该包含执行分号吗?试试单引号,比如。。值('{}','{}','{}','{}','{}');“.格式(等)