問題タブ [psycopg2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2201 参照

python - Python Psycopg エラーと接続処理 (v MySQLdb)

MySQLdb のように、接続を再確立せずに psycopg と postgres にエラーを処理させる方法はありますか? 以下のコメント付きバージョンは MySQLdb で動作し、コメントにより Psycopg2 で動作します。

これは物事を遅くする必要があります.フォーマットエラーを見逃すことについて誰か提案できますか? 明らかに、上記はアポストロフィでチョークしますが、次のようなものを取得したり、コミットしたり、再接続したりすることなく、それを通過させる方法はありますか?:

0 投票する
10 に答える
34762 参照

python - 文字列値を明示的に引用する方法(Python DB API / Psycopg2)

cursor.executeいくつかの理由で、2番目のパラメーターの内容に対してメソッドによって実行される暗黙的な引用を待つのではなく、文字列値の明示的な引用(構築されたSQLクエリの一部になる)を実行したいと思います。

「暗黙の引用」とは、次のことを意味します。

私はそのようなものを好むでしょう:

READY_TO_USE_QUOTING_FUNCTIONPython DB API仕様で期待されるこのような低レベルですか( PEP 249ドキュメントでそのような機能を見つけることができませんでした)。そうでない場合は、おそらくPsycopg2がそのような機能を提供しますか?そうでない場合、おそらくDjangoはそのような機能を提供しますか?私はそのような関数を自分で書きたくないのですが...

0 投票する
3 に答える
14372 参照

python - カーソルは Python の DB-API でどのように機能しますか?

RDBMS (MySQL および PostgreSQL) で Python を使用してきましたが、カーソルの使用方法を本当に理解していないことに気付きました。

通常、クライアント DB-API (psycopg2 や MySQLdb など) を介してスクリプトを DB に接続します。

次に、カーソルを作成します。

そして、クエリとコマンドを発行できます。

クエリの結果はどこにあるのでしょうか。それはサーバー上にありますか?またはクライアントで少し、サーバーで少し?そして、いくつかの結果にアクセスする必要がある場合は、それらを取得します:

また

ここで、すべての行を取得するわけではなく、別のクエリを実行することにした場合、以前の結果はどうなるでしょうか? それらはオーバーヘッドです。

また、コマンドのすべての形式に対してカーソルを作成し、それらの同じコマンドに対して何らかの方法で継続的に再利用する必要があります。psycopg2 は、何度も実行されるが異なる値を持つコマンドを何らかの方法で最適化できると思いますが、どのように価値がありますか?

どうも

0 投票する
3 に答える
26453 参照

python - OperationalErrorの取得:致命的:申し訳ありませんが、すでにpsycopg2を使用しているクライアントが多すぎます

エラーOperationalError:FATAL:申し訳ありませんが、psycopg2を使用しているときにすでにクライアントが多すぎます。使い終わった後、接続インスタンスでcloseメソッドを呼び出しています。何が原因であるかはわかりません。Pythonとpostgresqlを初めて使用した経験ですが、php、asp.net、mysql、およびsqlサーバーを数年使用した経験があります。

編集:私はこれをローカルで実行しています。接続が本来あるべきように閉じている場合は、一度に1つの接続しか開いていません。私はデータベースに対してGUIを開いていましたが、閉じていてもこのエラーが発生します。プログラムを実行した直後に発生しています。次のように開かれた接続を返す関数を呼び出します。

psycopg2.connect(connectionString)

ありがとう

最終編集:それは私の間違いでした。同じメソッドを何度も開いていたので、間違って同じメソッドを再帰的に呼び出していました。長い一日でした。

0 投票する
3 に答える
19175 参照

python - psycopg2 "TypeError:文字列のフォーマット中にすべての引数が変換されたわけではありません"

バイナリデータ(ワールプールハッシュ)をPGテーブルに挿入しようとしていますが、エラーが発生します:

コード:

挿入する前にconn.Binary( "identity_hash")を変数に追加しようとしましたが、同じエラーが発生します。

Identity_hash列はbyteaです。

何か案は?

0 投票する
2 に答える
751 参照

plone - セーブポイント サポートを使用して Zope を Postgres に接続する - ZPsycopgDA の代替

Postgres への Zope 接続でセーブポイント サポートを取得する方法はありますか?

私は現在、セーブポイントをサポートしていない ZPsycopgDA を使用しており、ビルドアウトでのインストールも困難です。SQLAlchemyDA のようなものに切り替えると、物事が簡単になりますか?

背景: Postgres データベースにユーザーがいますが、履歴を見ようとすると、セーブポイントに関するエラーが発生します。その問題はここで説明されています: http://plone.org/products/cmfeditions/issues/46

0 投票する
6 に答える
6071 参照

python - PostgreSQL での更新/置換操作を高速化するにはどうすればよいですか?

PostgreSQL 8.3 をストレージ バックエンドとして使用するかなり特殊なアプリケーションがあります (Python と psycopg2 を使用)。重要なテーブルに対して実行する操作は、ほとんどの場合、挿入または更新です (削除または選択はほとんどありません)。

合理的な理由から、適度に機能する独自のData Mapperのようなレイヤーを作成しましたが、1 つの大きなボトルネックである更新パフォーマンスがあります。もちろん、更新/置換のシナリオが「空のテーブルへの挿入」のシナリオほど高速になるとは思っていませんが、もう少し近づくといいでしょう。

このシステムには同時更新がないことに注意してください

更新時に各行のすべてのフィールドを常に設定します。これは、テストで「置換」という用語を使用する用語に見られます。私はこれまで、更新の問題に対して 2 つのアプローチを試みてきました。

  1. replace()行の配列を取得して更新するプロシージャを作成します。

    /li>
  2. insert_or_replaceときどき削除する以外はすべて複数行の挿入になるようにルールを作成する

    /li>

これらはどちらも更新をかなり高速化しますが、後者は挿入を少し遅くします:

テスト実行に関するランダムなメモ:

  • すべてのテストは、データベースが存在するのと同じコンピューターで実行されます。ローカルホストに接続しています。
  • 挿入と更新は、500 アイテムのバッチでデータベースに適用され、それぞれが独自のトランザクション ( UPDATED ) で送信されます。
  • すべての更新/置換テストは、データベースに既に存在していたものと同じ値を使用しました。
  • すべてのデータは、psycopg2 adapt() 関数を使用してエスケープされました。
  • すべてのテーブルは切り捨てられ、使用前にバキュームされます ( ADDED、以前の実行では切り捨てのみが発生しました)
  • テーブルは次のようになります。

    /li>

したがって、本当の問題は次のとおりです。更新/置換操作をもう少しスピードアップするにはどうすればよいですか? (これらの調査結果は「十分」かもしれないと思いますが、SOの群衆をタップせずにあきらめたくありません:)

また、よりエレガントな replace_item() に向けたヒントや、私のテストが完全に壊れているという証拠は大歓迎です。

再現したい場合は、ここでテスト スクリプトを入手できます。ただし、最初に確認することを忘れないでください... WorksForMeですが...

設定に合わせて db.connect() 行を編集する必要があります。

編集

#postgresql @ freenode の andres に感謝します。単一クエリの更新による別のテストがあります。複数行の挿入によく似ています (上記の update_andres としてリストされています)。

編集

以下の #postgresql @ freenode および jug/jwp の merlin83 のおかげで、挿入から一時への/削除/挿入アプローチ (上記の「update_merlin83 (i/d/i)」としてリスト) を使用した別のテストがあります。

私の直感では、これらのテストは実際のシナリオでのパフォーマンスをあまり表していませんが、その違いは、さらに調査するための最も有望なアプローチを示すのに十分大きいと思います. perftest.py スクリプトには、チェックアウトしたい人のために、すべての更新も含まれています。でもかなり醜いので、ゴーグルを忘れないでください:)

編集

#postgresql @ freenode の andres は、insert-to-temp/update バリアント (上記の「update_merlin83 (i/u)」としてリスト) でテストする必要があることを指摘しました。

編集

おそらく最終編集:負荷シナリオによりよく一致するようにスクリプトを変更しました。少しスケールアップしてランダム性を追加しても、数値は保持されるようです。誰かが他のシナリオとは非常に異なる数値を取得した場合、私はそれについて知りたいと思います.

0 投票する
1 に答える
1934 参照

django - Python/Djangoのスレッド間でトランザクションスコープを共有していますか? (PostgreSQL)

django ベースのコードで 2 つのスレッド間で同じトランザクションを共有する方法はありますか?

問題は、1.1 の TestCase (個々のテストをトランザクションにラップするもの) を持っていることです。これは、別のスレッドで実行されているコードをテストすることを目的としています [一種の非同期テスト]。したがって、これらのテストは、この 2 番目のスレッドで使用するためのデータを作成します。明らかに、このデータはトランザクション スコープ内で作成されるため、2 番目のスレッドからは見えません。しかし、それは基本的にPgSQLへの同じ接続であるべきなので(そうすべきですか?)、このトランザクションスコープを共有して、2番目のスレッドがその中に追加されているデータにアクセスできるようにする方法があることを願っています..

何か案が?

データベースは PgSQL 8.3、ドライバーは postgresql_psycopg2 です。Django — トランク。

0 投票する
7 に答える
23298 参照

python - PostgreSQL-トランザクションブロック外のコードからVACUUMを実行する方法は?

私はpsycopg2でPythonを使用しており、VACUUM数千行を挿入する毎日の操作の後に完全に実行しようとしています。問題は、コード内でコマンドを実行しようとするとVACUUM、次のエラーが発生することです。

トランザクションブロックの外部のコードからこれを実行するにはどうすればよいですか?

違いが生じる場合は、単純なDB抽象化クラスがあり、そのサブセットがコンテキスト用に以下に表示されます(実行不可、例外処理とdocstringが省略され、行間調整が行われます)。