Postgres可正常运行的查询用SQLAlchemy执行提示cake表不存在如何解决
排查解决步骤
- 第一步:确认数据库连接匹配
核对你手动执行SQL时用的Postgres数据库名、登录用户名,是否和代码里的db_name、db_user完全一致。很多时候本地psql默认登录的是和当前系统用户名同名的数据库,和代码连接的不是同一个库,会导致表找不到。 - 第二步:补全Schema路径或修正搜索路径
Postgres的表默认存放在publicschema下,如果你建表时指定了其他schema,需要:- 在SQL里写全schema路径,比如
select * from 你的schema名.cake limit 10; - 或者在连接串里指定默认搜索路径,修改连接串为:
你可以先在代码中执行以下语句查看当前连接能看到的所有表和所属schema,确认cake表的schema:db_string = 'postgres://{}:{}@{}:{}/{}?options=-c search_path=你的schema名,public'.format(db_user, db_pass, db_host, db_port, db_name)print(connection.execute("SELECT schemaname, tablename FROM pg_tables WHERE tablename = 'cake';").fetchall()) - 在SQL里写全schema路径,比如
- 第三步:校验表名大小写和权限
- 如果你建表时使用了双引号定义大小写敏感的表名(比如
CREATE TABLE "Cake" (...)),查询时必须严格匹配大小写并加双引号,写为from "Cake" - 确认
blahhd用户有cake表所在schema的USAGE权限,以及表的SELECT权限,可在psql中执行授权:
GRANT USAGE ON SCHEMA 你的schema名 TO blahhd; GRANT SELECT ON 你的schema名.cake TO blahhd; - 如果你建表时使用了双引号定义大小写敏感的表名(比如
- 第四步:检查事务提交状态
如果你是近期刚在psql中创建的cake表,确认在psql中执行过COMMIT;提交事务,未提交的事务中创建的表对其他会话不可见。
内容的提问来源于stack exchange,提问作者0004
相关产品推荐
相关产品推荐

