首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python psycopg2语法错误

Python psycopg2语法错误
EN

Stack Overflow用户
提问于 2017-06-29 23:35:45
回答 3查看 29.8K关注 0票数 3

我对python很陌生,并致力于使用psycopg2在postgres数据库中插入数据。我正在尝试插入项,但得到了错误消息。

Psycopg2.ProgrammingError:在“杯”或“杯”附近的语法错误第1行:插入存储值(7,10.5,咖啡杯)

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

这是密码。

代码语言:javascript
运行
复制
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')
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-30 00:04:02

记住始终使用execute命令的第二个参数来传递变量,如声明的这里

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

代码语言:javascript
运行
复制
cur.execute("INSERT INTO store (item, quantity, price) VALUES (%s, %s, %s);", (item, quantity, price))

这应该能起作用。

票数 6
EN

Stack Overflow用户

发布于 2017-06-30 06:24:10

在您的例子中,问题是咖啡杯参数值被视为字符串,但是psycopg2接受单引号中的值。基本上,根据我的理解,在为psycopg2创建SQL时,它要求为数据参数提供单引号,如果您为查询的开始和结束提供了双引号,那么您需要为参数提供单引号。

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

代码语言:javascript
运行
复制
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')
票数 1
EN

Stack Overflow用户

发布于 2022-11-11 00:58:16

我也面临着同样的问题,在对代码进行了一段时间的故障排除后,我发现我忘记在Insert查询中添加逗号(,)。

导致错误的代码:

代码语言:javascript
运行
复制
data['query'] = 'insert into contacts (name, contact_no, alternate_contact_no, email_id, address)' \
                'values (%s %s %s %s %s)'

正如您在上面的代码中所看到的,我忘了在每个‘'%s’之后添加逗号。

正确的代码:

代码语言:javascript
运行
复制
data['query'] = 'insert into contacts (name, contact_no, alternate_contact_no, email_id, address)' \
                'values (%s, %s, %s, %s, %s)'

希望能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44836551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档