これが話です。
一連のストアド プロシージャがあり、すべてに独自の引数の型があります。
私がやろうとしているのは、Python で少しタイプ セーフティ レイヤーを作成して、データベースにアクセスする前にすべての値が正しいタイプであることを確認できるようにすることです。
もちろん、Python でスキーマ全体をもう一度書き上げたくはないので、データベースから引数の名前と型を取得することで、起動時にこの情報を自動生成できると考えました。
したがって、テストのためだけにこのクエリをハックします
SELECT proname, proargnames, proargtypes
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_proc p
ON pronamespace = n.oid
WHERE nspname = 'public';
次に、Pythonから実行し、「proargtypes」の場合、結果ごとにこのような文字列を取得します
'1043 23 1043'
私の鋭い目によると、これらはスペースで区切られた postgresql 型の oid であり、この特定の文字列は、関数が varchar、integer、varchar を受け入れることを意味します。したがって、Pythonで言えば、これは
(unicode, int, unicode)
これらの数値から python の型を取得するにはどうすればよいですか?
理想的な最終結果は次のようになります
In [129]: get_python_type(23)
Out[129]: int
私はpsycopg2全体を見てきましたが、私が見つけた最も近いものは「extensions.string_types」ですが、それはoidをSQL型名にマップするだけです。