ヘルプ

ようこそ!

このフォーラムはOdooに興味がある方はどなたでも参加いただけます。Odooに関する質問を投稿したり、質問に回答したりすることができます。

0

データベースから直接情報を取得するにはどのようにすれば良いですか?

アバター
Manami Hashi

PostgreSQL から直接データベースにアクセスして、Odoo内の情報を取得したいのですが、テーブルやカラムはどこで確認すれば良いですか?

アバター
破棄
2 回答
1
アバター
Manami Hashi
Best Answer

設定->技術->データベース構造 に行きますと大体のことがわかります。



「モデル」がテーブルで、「項目」がカラムに対応しており、




SELECT (項目名) FROM (モデル名); でほとんどの情報を検索することができます。



ただ、顧客のカテゴリーに対応するパートナータグなどは、ひとつのレコードに複数の情報を持ちますので、先程の構文では検索できません。


このような項目(フィールド)は Many2Many field といいます。


Many2Many field

設定->技術->データベjース構造->多対多の関係 に進むと、Many2Many field の関係に対応するテーブルが見られます。



パートナーとパートナータグの関係に対応するテーブルは res_partner_res_partner_category_rel です。



データベースから覗くと、そのテーブルはパートナーIDとカテゴリーIDのカラムを持っていることがわかりますね。



プロパティフィールド

Many2Many field 以外にもうひとつ注意すべきフィールドがあります。

たとえば顧客の会計に関する情報に、「会計ポジション」や「売掛金勘定」がありますが、これらはパートナーテーブルではなく、別のテーブルに格納されています。



それらはプロパティフィールドといって、設定->技術->パラメータ->Company Properties から確認できます。



たとえばプロパティフィールド「顧客支払条件」は、プロパティテーブル内に property_payment_term というレコードを持っていて、パートナーのIDと、支払条件のIDの情報を持っているというわけです。



まとめ

  • データベースからは SELECT (項目名) FROM (モデル名); で検索!
  • Many2Many fieldは「多対多の関係」から関連するテーブルを探せ!
  • Property field は「Company Properties」から関連するレコードを探せ!

アバター
破棄
0
アバター
Takuya Sawada
Best Answer

田代さんの回答で、十分問題解決できていると思いますが、
複雑なモデルの場合、SQL のリレーションを自分で JOIN するのはなかなか大変かもしれません。

また、読取専用で SELECT 等する分には問題ないですが UPDATE 等直接 Postgres で実行するのは怖いので、
Odoo の WEB XML RPC の API を利用することをオススメします。
こちらを使えば、複雑なモデルでも比較的簡単に扱えます。

英語ですが、以下に参考リンクを貼っておきます。

Ref) https://www.odoo.com/documentation/11.0/webservices/odoo.html

また、大規模なデータの取り込みの高速化等は
以下のスライドがとても参考になるかと思います。

Ref) https://www.odoo.com/slides/slide/how-to-import-large-complex-data-into-odoo-455/pdf_content

アバター
破棄