【问题标题】:Python Programming Error: Column Does Not ExistPython 编程错误:列不存在
【发布时间】:2016-01-19 00:45:26
【问题描述】:

我调查了导致此问题的其他一些原因,但无法找到答案。该表不是在“”中创建的,情况完全相同。我的建表语句如下:

CREATE TABLE players (
    name VARCHAR(30), 
    id SERIAL PRIMARY KEY, 
    wins INTEGER DEFAULT 0, 
    matches INTEGER DEFAULT 0
);

我正在运行以下 PostgreSQL 查询(在 Python 函数中 - 将播放器插入数据库):

query = "INSERT INTO players (name) VALUES (%s);"

接下来是这个:

query = "SELECT id, name, wins, matches\
FROM players ORDER BY wins DESC;"

当我尝试运行脚本时,出现以下错误:

ProgrammingError: column "id" of relation "players" does not exist

我曾尝试取出 id 列并仅选择 wins,但它告诉我它也不存在。我还尝试将玩家表更改为以下内容:

CREATE TABLE players (
    name VARCHAR(30), 
    id SERIAL PRIMARY KEY, 
    wins INTEGER, 
    matches INTEGER
);

INSERT 语句是:

query = "INSERT INTO players (name, wins, matches) VALUES (%s,%s,%s);"
c.execute(query,(name,0,0))

并收到以下错误:

ProgrammingError: column "wins" of relation "players" does not exist

我运行了一个简单的 SELECT * FROM player;在我的终端中,它返回这个表,所以列肯定在那里......

 name | id | wins | matches 
------+----+------+---------
(0 rows)

【问题讨论】:

  • 连接字符串是否指向与您从终端连接的相同端口和数据库?将连接字符串和命令发布到终端客户端。
  • @wingᴇdpᴀnᴛʜᴇʀ name is not a reserved key word
  • @wingᴇdpᴀnᴛʜᴇʀ 在我进行一些格式更改并合并一些表格之前,名称列工作得很好,现在我什么都做不了。
  • @ClodoaldoNeto 对不起,我对这个很陌生,所以我不太清楚该怎么做。
  • 在您的应用程序和 psql 中“SHOW search_path”的结果是什么?

标签: python database postgresql psycopg2


【解决方案1】:

您确定在您删除的表中没有任何外键之前,这可能是数据库没有读取任何列的问题,因为它将无法找到对该键的任何引用。 尝试重新设计架构。

【讨论】:

  • 这里是之前的表格:
  • CREATE TABLE 分数(玩家 ID SERIAL,赢得 INTEGER,匹配 INTEGER);
  • 创建表播放器(名称文本,播放器 ID SERIAL PRIMARY KEY);
  • 他们在表格和 psycopg2 连接中没有错,这是我下面答案中的示例代码
【解决方案2】:
>>> import psycopg2
>>> con = psycopg2.connect(database='game',user='postgres',password='root',
           host='localhost',port=5432)
>>> cur = con.cursor()
>>> var = 'name_input'
>>> cur.execute("""INSERT INTO players(name) VALUES ('%s')""" %(var))
>>> win = 1
>>> match = 3
>>> cur.execute("""INSERT INTO scores(wins,matches) VALUES (%d,%d)""" %(win,match))
>>> con.commit()
>>> cur.execute("""INSERT INTO players(name) VALUES ('%s')""" %(var))
>>> con.commit()
>>> cur.execute("SELECT * FROM players")
>>> data = cur.fetchall()
>>> data
[('name_input', 3), ('name_input', 4)]
>>> cur.execute("SELECT * FROM scores")
>>> data = cur.fetchall()
>>> data
[(1, 1, 3)]

【讨论】:

    猜你喜欢
    • 2019-08-05
    • 2022-07-08
    • 2017-05-30
    • 2017-02-16
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    相关资源
    最近更新 更多