psycopg2,SELECT和模式

时间:2011-01-29 06:12:29

标签: python psycopg2

我正在尝试在“dam_vector”架构的一部分表上执行简单的select语句。我得到的错误是:

  

psycopg2.ProgrammingError:关系   “dam_vector.parcels_full”没有   存在LINE 1:SELECT * FROM   “dam_vector.parcels_full”

我无法理解这一点,并且知道我错过了一些明显的东西。你能提供的任何帮助都会很棒。

这是我正在使用的代码。 db是一个成功连接到数据库的连接字符串。

cur = db.cursor()
query = 'SELECT * FROM "dam_vector.parcels_full"'
cur.execute(query)
results = cur.fetchall()

当失败并且在我对谷歌做了一些研究之后我尝试了这个。同样的错误。

cur.execute("SET search_path TO dam_vector,public")
db.commit()

cur = db.cursor()
query = 'SELECT * FROM "parcels_full"'
cur.execute(query)
results = cur.fetchall()

2 个答案:

答案 0 :(得分:4)

双引号使其中的任何内容成为标识符,因此查询

SELECT * FROM "dam_vector.parcels_full";

从schama dam_vector.parcels_full(或搜索路径中的任何内容)点击表public(句号解释为表名称的一部分)。

正如亚当所说,你不需要带名字而不带一些特殊字符的引号。 尝试:

SELECT * FROM dam_vector.parcels_full;

如果您真的想使用双引号,请转到:

SELECT * FROM "dam_vector"."parcels_full";

答案 1 :(得分:1)

您不应该需要dam_vector.parcels_full附近的引号。

以下输出是否表明确实存在parcels_full表?

cur.execute("""SELECT tablename 
                 FROM pg_tables 
                WHERE tablename NOT LIKE ALL (ARRAY['pg_%','sql_%']);""")
cur.fetchall()