Python psycopg2 语法错误

新手上路,请多包涵

我是 python 的新手,正在使用 psycopg2 在 postgres 数据库中插入数据。我正在尝试插入项目但收到错误消息

“Psycopg2.ProgrammingError:“cup”第 1 行或附近的语法错误:INSERT INTO store VALUES(7,10.5,咖啡杯)

咖啡杯旁边有 ^。我假设顺序是错误的,但我认为只要您指定了值,您就可以这样输入。

这是代码。

 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')

原文由 IpSp00f3r 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 553
2 个回答

请记住始终使用执行命令的第二个参数来传递变量,如此 所述。

此外,在语法中使用字段名称:

 cur.execute("INSERT INTO store (item, quantity, price) VALUES (%s, %s, %s);", (item, quantity, price))

这应该够了吧。

原文由 jgmh 发布,翻译遵循 CC BY-SA 3.0 许可协议

您遇到的问题是 咖啡杯 参数值被视为字符串,但 psycopg2 接受单引号中的值。基本上根据我的理解,当我们为 psycopg2 创建 SQL 查询时,它要求为数据参数提供单引号 [如果您为查询开始和结束提供了双引号] 在您的情况下,您为查询开始和结束提供了双引号,因此您需要给参数单引号。


我的观察是您为 psycopg2 中的每个数据参数提供单引号


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))
    cur.execute("INSERT INTO store VALUES('%s','%s','%s')" % (quantity, price, item))
    conn.commit()
    conn.close()

create_table()
insert(7, 10.5, 'coffee cup')

原文由 Vardhman Patil 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题