我可以连接到数据库,但是psycopg2无法找到我的任何表。以下将导致尝试吸引我的用户时出错:

import psycopg2

try:
    conn = psycopg2.connect("dbname='pdb' user='postgres' host='localhost' password='password'")
except:
    print 'failed to connect'

cur = conn.cursor()
cur.execute(""" SELECT * from Users """)
rows = cur.fetchall()
for row in rows:
    print row[0]

#Error:
psycopg2.ProgrammingError: relation "users" does not exist
LINE 1: SELECT * from Users

# This also fails
cur.execute("""SELECT * from pdb.Users """)

如果我做:
cur.execute(""" SELECT * from pg_database """)

# Outputs
template1
template0
postgres
pdb

在我的管理面板中,pdb显示了一堆表,其中一个表是Users,所以我不确定为什么psycopg2无法找到它。

这是psql的pdb的打印输出:
               List of relations
 Schema |        Name        | Type  |  Owner
--------+--------------------+-------+----------
 public | Companies          | table | postgres
 public | Users              | table | postgres
(2 rows)

最佳答案

您的表名称UsersCompanies均以大写字母开头。从错误消息中可以看到,PostgreSQL会将所有标识符转换为小写字母(默认)。

psycopg2.ProgrammingError: relation "users" does not exist

其中users用小写形式编写。如果您希望严格遵循SQL标准(因为PostgreSQL闻名),则需要这样做。您可以通过两种方式解决此问题:

解决它在您的数据库中:

遵守通用约定,并将表重命名为小写。

在您的代码中解决它:

引用您的标识符(在这种情况下为您的表名),以便PostgreSQL保持不变:
cur.execute(""" SELECT * from "Users" """)

关于python - 连接后psycopg2找不到任何表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27434633/

10-16 11:41