【发布时间】:2017-12-03 19:53:38
【问题描述】:
我是 python 新手,正在使用 psycopg2 在 postgres 数据库中插入数据。我正在尝试插入项目,但收到错误消息
“Psycopg2.ProgrammingError:在“cup”处或附近出现语法错误 LINE 1: INSERT INTO store VALUES(7,10.5,coffee cup)
在咖啡杯旁边带有 ^。我假设顺序是错误的,但我认为只要你指定了值,你就可以这样输入。
这里是代码。
import psycopg2
def create_table():
conn=psycopg2.connect("dbname='db1' user='postgres' password='postgress123' host='localhost' port='5432'")
cur=conn.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS store (item TEXT, quantity INTEGER, price REAL)")
conn.commit()
conn.close()
def insert(quantity, price, item):
conn=psycopg2.connect("dbname='db1' user='postgres' password='postgress123' host='localhost' port='5432'")
cur=conn.cursor()
cur.execute("INSERT INTO store VALUES(%s,%s,%s)" % (quantity, price, item))
conn.commit()
conn.close()
create_table()
insert(7, 10.5, 'coffee cup')
【问题讨论】:
-
不要在sql查询中直接做字符串插值。它使您容易受到sql injection attacks 的攻击。在这种情况下,它还会导致您的查询格式不正确。
-
谢谢保罗。我对 python 和 psycopg2 非常陌生,并且正在关注网络上的示例以了解事物的工作原理。在这种情况下,您将如何避免上述代码中的 SQL 注入? Psycocg2 文档建议无论传递什么类型的数据,都应该使用 %s。任何帮助将不胜感激。
标签: python postgresql