問題タブ [python-db-api]

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 投票する
0 に答える
1177 参照

python - データベースに依存しない方法で Python DB カーソル列タイプをチェックする

データを別のアプリケーションに正しくロードできるように、列の型情報を保持しながら、さまざまなデータベース (現時点では Oracle と Postgre) からいくつかのデータを CSV ファイルにダンプする必要があります。基本的に、使用中の特定の DBAPI モジュールに依存しない方法で、列データ内の文字列/数値データをカーソル オブジェクトから区別できる関数を作成する必要があります。

DB-API v2 docsによると、各 DBAPI モジュールは、各列 ( n 番目の列など)module.STRINGのカーソル オブジェクト内の型オブジェクトと「等しい必要がある」型オブジェクト (たとえば )を定義する必要があります。cursor.description[n][1]

私が抱えている問題は...カーソルオブジェクトにしかアクセスできない場合、この比較に適切なタイプオブジェクトをどのように把握できますか? カーソル オブジェクトから適切な DBAPI モジュールへのハンドルを取得するにはどうすればよいですか。アドバイスや提案はありますか?

私はこれまで醜いクラッジを使用してきました:

これに対するより堅牢でエレガントなソリューションが必要です。アドバイスや提案はありますか?

編集:これまでに私が思いついた最善のことは、次のほとんど恐ろしいハックを使用して適切なモジュールへのハンドルを取得することです:

0 投票する
9 に答える
163532 参照

python - 結果セットが空かどうかを確認する方法は?

ヒットを返さない sql ステートメントがあります。たとえば、'select * from TAB where 1 = 2'.

返された行数を確認したいのですが、

ここで私はすでに例外を取得しています: "(0, 'No result set')"

この例外を回避するにはどうすればよいですか?結果セットが空かどうかを確認してください。

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

python - dbに送信される準備済みクエリを取得する方法

Python データベース API 仕様を実装するpyodbcなどのデータベース ライブラリを使用する場合、パラメーター置換が適用された後に完全に準備されたクエリを取得するにはどうすればよいでしょうか。パラメータ置換によって 18 個の引数を受け取る Sybase ストアド プロシージャを呼び出しています。行われた実際の呼び出しをキャプチャしてログに記録し、デバッグに役立てたいと思います。私が必要とするもののより簡単な例:

pyodbc の例

予想される最終クエリ (ログに記録される)

sqlite3 の例

試すのにpyodbcは必要ないので、sqlite3の例を載せました。

アップデート

準備済みステートメントを使用する場合、テンプレートにデータを入力するプロセスは、DBMS のサーバー側で行われるようです。そのため、user581592 の回答で説明されているように、サーバーからクエリの最終バージョンを取得するためのメソッドや API がないことがよくあります。注目すべきその他のリンクは、これについてさらに議論している pyodbcのIssue 163です。また、psycopg などの一部の db ライブラリには、最終ステートメントを返すメソッドmogrifyが追加されています。しかし、ドキュメントに記載されているように、これは DB API の一部ではありません。

0 投票する
0 に答える
324 参照

python - csv行をexecutemany()に遅延して渡すにはどうすればよいですか?

Python 3.3 および MySQL 5.6.12 で MySQL Connector/Python 1.0.11 を使用して、cursor.executemany ('INSERT INTO ... VALUES') を介して csv ファイルをテーブルにロードしています。sqlite3 または psycopg2 を使用すると、seq_of_parameters に _csv.reader オブジェクトを渡すことができますが、MySQL は次のエラーで失敗します。

ドキュメントではシーケンスでなければならず、_csv.readerオブジェクトは列挙子( iternextを定義する) であり、シーケンスではありません。もちろん、'list(my_csv_reader)' を渡すこともできますが、これは遅延ではないと確信しており、これらのファイルには 10^6+ 行を含めることができます。それを怠惰に渡す方法はありますか?または、INSERT を実行する前に executemany() がリストを展開するので、時間を無駄にしていますか? (cursor.py からのヒント:「INSERT ステートメントは、データをバッチ処理することによって最適化されます。つまり、MySQL の複数行の構文を使用します。」) イテレータをジェネレーターでラップするようなものかもしれません。ala http://www.logarithmic.net/ pfh/blog/01193268742 . あなたの考えをとても楽しみにしています!

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

python - Cassandra の Python クライアント ライブラリの選択

以前に Pycassa を使用したことがあり、バッチ ミューテーションや接続プーリングなどを使用するラッパーを作成しました下位互換性のためにのみサポートされています。Apache サイトでは、まだベータ版である DataStax によって記述された Python API を使用することを推奨しています (ドキュメントによると)。python-driver/README.rst ファイルからの警告を参照してください

警告

このドライバーは現在、大規模な開発が行われているため、パッケージ、モジュール、クラス、および関数の API およびレイアウトは変更される可能性があります。重大なバグもある可能性があるため、現時点では本番環境での使用はお勧めし ません。

DataStax サイトhttp://www.datastax.com/download/clientdriversでは、DB-API 2.0 とレガシー API の使用を推奨しています。もっとありますか?CQL 3 ベースの API を比較したものはありますか? 一番目立つのは?事実に基づいた回答はコミュニティの役に立ちますので、意見はお控えください。

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

python - Psycopg2 プロダクション 適切な mogrify?

私は正確に何をしたいのですcursor.mogrifyが、生産に適した方法で。

文字列を連結してクエリを作成するレガシー Python コードを更新しています。安全に脱出するには、これを変更する必要があります。

クエリは長く、実行されるサーバーとは別のサーバーで構築されるため、cursor.executeエスケープするために使用する通常のプロセスは、コードの明確さと実用的な実行可能性の両方の理由から魅力的ではありません。

私は mogrify を使用しますが、これはデバッグのみを目的としていることを理解しています。

私は周りを見回しましたが、これに対する良い答えが見つからないようです。何を指示してるんですか?

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

python - Postgresql:日付によって制約されたテーブルから行を削除する方法は?

psycopg2 を使用していますが、特定の日付より古い行を削除するにはどうすればよいですか? 例えば:

このように書くと TypeError: 'datetime.date' object does not support indexing. どうすればそれを行うことができますか?ありがとう!