psycopg错误,列不存在

时间:2017-01-05 00:09:17

标签: postgresql python-3.x psycopg2

我一直得到这个

  

错误: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)

2 个答案:

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