测试 PostgreSQL 表是否不存在(使用 psycopg2)

sc2*_*c28 5 python postgresql boolean psycopg2

使用 Psycopg2,我需要测试 postgresql 表是否存在。

在类似的问题中,建议使用以下测试:

cursor.execute("select exists(select * from myDb.mytable_%s)" % complementName)
tableExists = cursor.fetchone()[0]
print(tableExists)
Run Code Online (Sandbox Code Playgroud)

如果表已经存在,并且返回 ,则此方法非常有效,但如果表True存在,则此方法不起作用。我没有像我需要的那样返回,而是收到错误False

编程错误:关系“myDb.mytable_001”不存在

我究竟做错了什么?False 如果表不存在,我应该怎么做才能得到语句?谢谢你的帮助!

编辑

根据评论中的建议,我也尝试过:

tableExists = cursor.execute("SELECT 1 AS result FROM pg_database WHERE datname='mytable_001'")
Run Code Online (Sandbox Code Playgroud)

tableExists = cursor.execute("SELECT EXISTS (SELECT 1 AS result FROM pg_tables WHERE schemaname = 'mySchema' AND tablename = 'mytable_001)')")
Run Code Online (Sandbox Code Playgroud)

None无论表是否存在,两者都只是返回 。但是,我不确定语法,也许你可以指出我可能犯的一些新手错误?谢谢!

编辑2 最后,解决方案包括上面后一个查询的组合,并按如下方式获取布尔结果:

cursor.execute("SELECT EXISTS (SELECT 1 AS result FROM pg_tables WHERE schemaname = 'mySchema' AND tablename = 'mytable_001');")
tableExists = cursor.fetchone()[0]
Run Code Online (Sandbox Code Playgroud)

小智 0

您可以从信息架构中获取信息,例如:

SELECT table_schema,table_name
FROM information_schema.tables
WHERE table_name like 'pg_database';
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

3971 次

最近记录:

7 年,2 月 前