Oracle データベースからデータを抽出する必要があります。データベースで定義されているスキーマを確認するにはどうすればよいですか? Metadata() の記述でスキーマを定義しないと、テーブルが見つかりません。ご協力いただきありがとうございます、
2 に答える
デフォルトの Oracle スキーマは、Oracle 接続で使用されたユーザー名と一致します。テーブルが表示されない場合は、テーブルが別のスキーマで作成されていることを意味します。
ここで 2 つの質問があるようです。
1) Oracle スキーマについて - Oracle でスキーマとテーブルを検索する方法
2) SQLAlchemy リフレクションについて - テーブルに Oracle スキーマを指定する方法
最初の質問に対する答えは、さまざまな場所で見つけることができます。すなわちここ:https://stackoverflow.com/a/2247758/1296661
2 番目の質問への回答: テーブル クラス コンストラクターには、テーブルのスキーマが既定のユーザーのスキーマと異なる場合にそれを指定するスキーマ引数があります。ここで詳細を参照してください http://docs.sqlalchemy.org/en/rel_0_7/core/schema.html#sqlalchemy.schema.Table
2 番目の質問に答える Python コードを次に示します。ケースに合わせてデータベース接続とテーブル名の値を設定する必要があります。
from sqlalchemy import Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
engine = create_engine('oracle://<user_name>:<password>@<hostname>:1521/<instance name>', echo=True)
Base = declarative_base()
reflected_table = Table('<Table name>',
Base.metadata,
autoload=True,
autoload_with=engine,
schema='<Schema name other then user_name>')
print [c.name for c in reflected_table.columns]
p = engine.execute("SELECT OWNER,count(*) table_count FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'TABLE' GROUP BY OWNER");
for r in p:
print r
sqlschema とリフレクション機能を使用して頑張ってください。とても楽しいです。プログラムでスキーマ情報をほとんど定義せずに、Python プログラムを既存のデータベースで動作させることができます。
私は本番環境で oracle db でこの機能を使用しています。定義する必要があるのは、外部キーと主キーを明示的に設定するテーブル間の関係だけでした。