2011-02-02 4 views
3

フィールドにデータを収集する場合がいくつかあります。これは私がいつも私のpostgresデータベースにアクセスできるとは限らない状況にあります。psycopg2を使用して接続なしでクエリを作成する

psycopg2関数をオフラインで使用して、戻ってくることができるクエリを生成し、データベースに接続できるようになれば、物事を同期させることができます。戻ってくるすべてのものを処理してください。

私が現在苦労していることの1つは、psycopg2カーソルが接続を構築する必要があることです。

私の質問は:アクティブな接続オブジェクトなしmogrifyのようなものを行うには、カーソルを使用する方法は

ありますか?または、データベースに接続されていない接続オブジェクトを使用していますか?私はモーグリファイの結果を一時的にファイルに書き出して、後で処理できるようにしたいと思います。

答えて

0

後で別の構造に挿入するデータを保存する方が簡単で多目的であるようです。おそらくcsvファイル。接続すると、そのテーブルを実行できますが、必要に応じてそのCSVで他の作業を簡単に行うこともできます。

+0

私はこのaproachを使用します。オンライン(http://initd.org/psycopg/docs/cursor.html#cursor.copy_from)でpostgresqlにコピーできる(またはそれ以上の)csvファイルを作成します。 – milovanderlinden

7

接続はエスケープに使用されるいくつかのパラメータ(エンコード、標準準拠の文字列など)を検出するために使用されるため、脆弱なアプローチになります。

あなたのパラメータにpsycopg2.extensions.adapt(x).getquoted()を呼び出し、それを通常のPython %演算子を使ってクエリにマージすることができます。

現在、リリースされているpsycopgのバージョン(最大2.3.2)は、None - >NULLの変換では失敗する可能性があります。これらの値を手動で変換するか、またはNoneのためのアダプタを登録することができます。this commitで確認できます。

+0

ありがとうございました。私は脆弱性を理解しており、実際に別の選択肢を探します。 – milovanderlinden

+0

これは2011年、2017年にはこれらのパラメータ(エンコーディング、標準準拠の文字列など)を送信するか、接続せずにmogrifyを呼び出すための方法があります。私はgithub dvarrazzoで同じ写真を見ています。もしあなたなら、それを説明することができます。ありがとう –

+0

@Sk。いいえ、パラメータを偽装する方法はありません。あなたが何をしているのか分かっているのであれば、あなたのサーバが受け入れることができるものに関しては、 'adapt()'を手動で使うことができます。これは「汎用」ソリューションではなく、一度作成してどこでも実行できる文字列ですが、サーバーがどのように構成されているか分かっていれば、そのソリューションで十分でしょう。 SQL文字列は、データを格納し、適切なデータ構造に格納し、サーバーに送信するときにSQLに変換する方が良い選択肢ではありません。 – piro

関連する問題