我一直得到这个
错误:psycopg2.ProgrammingError:column" someentry"不存在。
该错误表示当someentry
不是列时,列someentry
不存在,它只是输入数据库的值。
以下是给出错误的代码:
cur.execute('INSERT INTO {0!s} (ip_id, item) VALUES ({1!s}{2!s})'.format('mytable',1,'someentry'))
以下是我创建表格的方法:
tablename = 'mytable'
command = """
CREATE TABLE IF NOT EXISTS {} (
ip_id SERIAL PRIMARY KEY,
item VARCHAR(255) NOT NULL
)
""".format(tablename)
cur.execute(command)
答案 0 :(得分:3)
您必须在查询中使用单引号。
我收到了与此相同类型的错误
cur.execute('insert into my_table(id, name, horse_type, horse_code, horse_name) values(default, %s, 3, %s, "Mary Wonder")', [e[0], e[1]])
它产生了
Traceback (most recent call last):
File "process_horse.py", line 11, in <module>
[e[0], e[1]])
psycopg2.ProgrammingError: column "Mary Wonder" does not exist
LINE 2: ', "Mary Wonder")
^
显然这是数据,而不是列名,就像你说的那样 当我把它改成
cur.execute("insert into my_table(id, name, horse_type, horse_code, horse_name) values(default, %s, 3, %s, 'Mary Wonder')",[e[0], e[1]])
它没有任何错误。
答案 1 :(得分:0)
导致此错误的问题是因为您忘记在{1!s}
和{2!s}
之间添加逗号,而且您也没有转义字符串'someentry'
,因此postgres认为它是一个列名称标识符。
解决方案是修复语法错误和转义值。这是正确的方法:
cur.execute(
'INSERT INTO mytable (ip_id, item) VALUES (%s, %s)',
(1, 'someentry')
)
如果表名也是变量,因为表名是use extension AsIs
所需的标识符:
from psycopg2.extensions import AsIs
cur.execute(
'INSERT INTO %s (ip_id, item) VALUES (%s, %s)',
(AsIs('mytable'), 1, 'someentry')
)