检查 python 下是否存在 postgresql 表(可能还有 Psycopg2)
如何使用 Psycopg2 Python 库确定表是否存在?我想要一个 true 或 false 布尔值。
How can I determine if a table exists using the Psycopg2 Python library? I want a true or false boolean.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
怎么样:
使用 EXISTS 的替代方法更好,因为它不需要检索所有行,而只需要至少存在一个这样的行:
How about:
An alternative using EXISTS is better in that it doesn't require that all rows be retrieved, but merely that at least one such row exists:
我具体不知道 psycopg2 库,但可以使用以下查询来检查表是否存在:
使用 information_schema 相对于直接从 pg_* 表中选择的优点是查询具有一定程度的可移植性。
I don't know the psycopg2 lib specifically, but the following query can be used to check for existence of a table:
The advantage of using information_schema over selecting directly from the pg_* tables is some degree of portability of the query.
第一个答案对我不起作用。我发现成功检查了 pg_class 中的关系:
The first answer did not work for me. I found success checking for the relation in pg_class:
我知道你要求 psycopg2 答案,但我想我应该添加一个基于 pandas 的实用函数(它在底层使用 psycopg2),只是因为
pd.read_sql_query()
让事情变得如此方便,例如避免创建/关闭游标。我仍然使用 psycopg2 创建数据库连接对象
conn
,与此处的其他答案类似。I know you asked for psycopg2 answers, but I thought I'd add a utility function based on pandas (which uses psycopg2 under the hood), just because
pd.read_sql_query()
makes things so convenient, e.g. avoiding creating/closing cursors.I still use psycopg2 to create the db-connection object
conn
similarly to the other answers here.以下解决方案也处理
schema
:The following solution is handling the
schema
too:扩展上述 EXISTS 的使用,我需要一些东西来测试表的存在性。我发现在 select 语句上使用 fetch 测试结果会在空的现有表上产生“None”结果 - 并不理想。
这是我想出的:
Expanding on the above use of EXISTS, I needed something to test table existence generally. I found that testing for results using fetch on a select statement yielded the result "None" on an empty existing table -- not ideal.
Here's what I came up with:
您可以查看
pg_class
目录:假设以
cur
作为游标的打开连接,cur.fetchone()
将解析为True
或False
,因为EXISTS()
函数的。You can look into
pg_class
catalog:Assuming an open connection with
cur
as cursor,cur.fetchone()
will resolve to eitherTrue
orFalse
because of theEXISTS()
function.