Psycopg2 Python ライブラリを使用してテーブルが存在するかどうかを確認するにはどうすればよいですか? true または false のブール値が必要です。
42115 次
9 に答える
97
どうですか:
>>> import psycopg2
>>> conn = psycopg2.connect("dbname='mydb' user='username' host='localhost' password='foobar'")
>>> cur = conn.cursor()
>>> cur.execute("select * from information_schema.tables where table_name=%s", ('mytable',))
>>> bool(cur.rowcount)
True
EXISTS を使用する別の方法は、すべての行を取得する必要はなく、そのような行が少なくとも 1 つ存在するだけでよいという点で優れています。
>>> cur.execute("select exists(select * from information_schema.tables where table_name=%s)", ('mytable',))
>>> cur.fetchone()[0]
True
于 2009-12-09T14:28:57.087 に答える
23
特にpsycopg2 libはわかりませんが、次のクエリを使用してテーブルの存在を確認できます。
SELECT EXISTS(SELECT 1 FROM information_schema.tables
WHERE table_catalog='DB_NAME' AND
table_schema='public' AND
table_name='TABLE_NAME');
pg_* テーブルから直接選択するよりも information_schema を使用する利点は、クエリのある程度の移植性です。
于 2009-12-09T14:09:52.143 に答える
5
select exists(select relname from pg_class
where relname = 'mytablename' and relkind='r');
于 2009-12-09T14:08:06.157 に答える
3
最初の答えはうまくいきませんでした。pg_class のリレーションのチェックに成功しました:
def table_exists(con, table_str):
exists = False
try:
cur = con.cursor()
cur.execute("select exists(select relname from pg_class where relname='" + table_str + "')")
exists = cur.fetchone()[0]
print exists
cur.close()
except psycopg2.Error as e:
print e
return exists
于 2014-01-31T16:52:55.030 に答える
2
#!/usr/bin/python
# -*- coding: utf-8 -*-
import psycopg2
import sys
con = None
try:
con = psycopg2.connect(database='testdb', user='janbodnar')
cur = con.cursor()
cur.execute('SELECT 1 from mytable')
ver = cur.fetchone()
print ver //здесь наш код при успехе
except psycopg2.DatabaseError, e:
print 'Error %s' % e
sys.exit(1)
finally:
if con:
con.close()
于 2015-06-18T03:50:25.423 に答える
2
pd.read_sql_query()
あなたがpsycopg2の回答を求めたことは知っていますが、カーソルの作成/終了を回避するなど、物事を非常に便利にするという理由だけで、pandas(フードの下でpsycopg2を使用する)に基づくユーティリティ関数を追加すると思いました。
import pandas as pd
def db_table_exists(conn, tablename):
# thanks to Peter Hansen's answer for this sql
sql = f"select * from information_schema.tables where table_name='{tablename}'"
# return results of sql query from conn as a pandas dataframe
results_df = pd.read_sql_query(sql, conn)
# True if we got any results back, False if we didn't
return bool(len(results_df))
conn
ここでの他の回答と同様に、まだpsycopg2を使用してdb-connectionオブジェクトを作成しています。
于 2020-07-20T04:03:26.823 に答える
0
次のソリューションも処理していschema
ます。
import psycopg2
with psycopg2.connect("dbname='dbname' user='user' host='host' port='port' password='password'") as conn:
cur = conn.cursor()
query = "select to_regclass(%s)"
cur.execute(query, ['{}.{}'.format('schema', 'table')])
exists = bool(cur.fetchone()[0])
于 2018-03-08T09:54:02.877 に答える