我正在尝试使用 PostgreSQL 设置一个玩具数据库,并使用 Python 中的 psycopg2 读取表,但 psycopg2 找不到现有表。
运行以下代码时
import psycopg2
conn = psycopg2.connect(
host="localhost",
database="example_db",
user="my_user",
password="my_pw"
)
cur = conn.cursor()
cur.execute("SELECT * FROM employees")
rows = cur.fetchall()
cur.close()
我收到错误了
psycopg2.errors.UndefinedTable: relation "employees" does not exist
LINE 1: SELECT * FROM employees
如果我从命令行直接连接到 PostgreSQL 服务器,就可以找到该表
$ psql -U my_user -d example_db
psql (12.18 (Ubuntu 12.18-0ubuntu0.20.04.1))
Type "help" for help.
example_db=# SELECT * FROM employees;
id | name | age | position
----+--------------+-----+-----------
1 | John Doe | 30 | Manager
2 | Jane Smith | 25 | Developer
3 | Mike Johnson | 35 | Designer
(3 rows)
我正在使用 WSL 和 Ubuntu-20.04 发行版。
编辑:
这里是可用的数据库
$ sudo -u postgres psql
psql (12.18 (Ubuntu 12.18-0ubuntu0.20.04.1))
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------+----------+----------+---------+---------+-----------------------
example_db | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | my_user=CTc/postgres
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
您可以通过pgAdmin连接到数据库并通过GUI检查数据库吗?
检查数据库所在的架构,并尝试将其添加到查询中,如下所示:
cur.execute("SELECT * FROM schema_here.employees")
通常新的数据库实例位于“公共”模式中,但您也可以指定“公共”以外的模式名称。