なぜpythonにカーソルオブジェクトが必要なのか混乱しています。私はjdbcを知っているし、データベース接続は非常に直感的ですが、私はカーソルオブジェクトと混同しています。また、私はcursor.close()とconnection.close()関数の違いは何かについては疑問があります。カーソルと接続オブジェクトの違い
答えて
カーソルパラダイムはPythonに固有のものではありませんが、databases themselvesでは頻繁に使用されるデータ構造です。
基本的な実装によっては、同じ接続をデータベースに共有する複数のカーソルを生成することができます。カーソルを閉じると、DBからフェッチされない(またはフェッチされたが使用されていない)結果を含むクエリーに関連付けられたリソースを解放する必要がありますが、データベースへの接続を削除しないため、同じデータベースで新しいカーソルを取得できます再度認証する必要はありません。
接続オブジェクトはデータベースへの接続です。データベースとの接続が完了したら、接続オブジェクトは閉じます。 Cursorオブジェクトは、クエリの結果セットに対するイテレータです。その結果セットが終了したらそれらを閉じます。
SQLの文字列を実行するexecute(sql_string)というコマンドがあるので、イテレータであるとは限りません。結果セットの反復子がそのような機能を持つことは意味がありません –
あなたは正しいですが、カーソルはクライアント上の構造だけでなくサーバー上の構造でもあります。これは、準備されたSQL文を利用して実行し、実行後にその結果を反復処理するのに役立ちます。 – Toote
他にも触れられているように、Connection()
はデータベースへのネットワーク接続であり、実際にはカーソルを返すだけです。 PEP-249(DBApi 2.0が指定されている)では、接続またはカーソルが正確に何であるかを明確に定義しておらず、それぞれの方法で何を行う必要があるのかも明確に定義されていません。唯一 <module>.connect()
が <module>.Connection.cursor()
が <module>.Cursor
、および <module>.Cursor.execute()
のインスタンスを返す必要があること、 <module>.Connection
のインスタンスを返す必要があることが提供声明を呼び出し、結果の行を返す必要があります。具体的には、 <module>.Connection.execute()
を定義していませんが、特定の実装では拡張として実装することは自由です。
しかし、これらの拡張機能によっては、ポータブルコードを持たないため、おそらく賢明ではありません。中間オブジェクトなしで接続上で実行すると、一部のデータベースでは困難になる可能性があるため、DBApiではこの2つのレベルの要件があります。
- 1. ソケット接続とXMPP接続の違い
- 2. SQL接続とOLEDB接続の違い
- 3. ポインタイベントとカーソルの違い
- 4. jdbc接続プールの共有可能な接続と共有できない接続の違い?
- 5. Kerberos - サーバーへのJAAS接続とSQL Serverの信頼済み接続の違い
- 6. ソケット接続とtcp接続の間に違いはありますか?
- 7. SQLCLRの接続文字列の違い
- 8. LiveMeshオブジェクトとはSilverlight 3.0との接続
- 9. マルチプロセッシングとパイプラインとマルチプロセッシングの違い。接続.Pipe
- 10. Connections_connectedとmysqlに接続されているスレッドの違い
- 11. "オブジェクト" と "オブジェクト*" の違い
- 12. 接続文字列の初期カタログとデータベースキーワードの違い
- 13. URL接続とソケットクラスの違いは何ですか?
- 14. DataTableオブジェクトへの接続
- 15. 直接CRCと間接CRCの違い
- 16. SQL接続vb.net - アプリケーション用の1つのSQL接続オブジェクト。
- 17. mysqlの間違った接続エンコーディング
- 18. クロス適用とカーソル - 構文と相違
- 19. コンストラクタとオブジェクトの違い
- 20. オブジェクトとNSObjectの違い
- 21. オブジェクトとハッシュの違いは?
- 22. 関数にsqlite接続とカーソルを置くことはできますか?
- 23. 接続と接続要求のタイムアウト
- 24. モバイルブロードバンド接続の接続と切断
- 25. MDFファイルと接続の接続
- 26. mongoDB foreachループとwhileループ間のカーソルの違い
- 27. 接続オブジェクトの使用方法
- 28. アンドロイドのsqliteパフォーマンスのベストプラクティス(デマンドアクセスとカスタムオブジェクトの常時接続/カーソルVSによる直接データアクセス)
- 29. プロキシ接続時の違いは何ですか?
- 30. MySQLカーソルと準備文 - 間違っているもの
私たちは同時に2つのカーソルを持つことができます。はいの場合、同時実行の問題について言及してください –
これらのすべての詳細は「基礎となる実装に依存して」隠されています。対応するDBドライバ – Toote
のドキュメントを読む必要がありますウィキペディアによると:「コンピュータ科学では、データベースカーソルは、データベース内のレコードを走査することを可能にする制御構造です。カーソルは、走査、データベースレコードの検索、追加、削除など、 Pythonがカーソルを実装する方法は、その記述とうまく一致しません。単純なイテレータの場合は、SQL文の実行に責任を負いません。それはPython固有のものではありませんか?そして説明に値する何か? – skyking