カーソルオブジェクトと接続オブジェクトの違い
-
11-12-2019 - |
質問
Pythonがカーソルオブジェクトを必要とする理由について混乱しています。私はJDBCを知っています、そして、そこにデータベース接続は非常に直感的ですが、Pythonではカーソルオブジェクトと混同しています。また、リソースリリースの観点からcursor.close()とconnection.close()関数の違いは何ですか。
解決
カーソルパラダイムはPythonに固有のものではなく、データベース自体。
基礎となる実装に応じて、データベースへの同じ接続を共有するいくつかのカーソルを生成することが可能です。カーソルを閉じると、DBから取得された(または取り出したが使用されていないが使用されていない)が、データベース自体への接続を排除することはできないため、クエリに関連付けられているリソースを解放する必要がありますが、同じデータベース上で新しいカーソルを取得できます。再び認証する必要なしに。
他のヒント
他の言及は、Connection()
がデータベースへのネットワーク接続であり、それは実際にはカーソルを返すことだけです。 pep-249 。ここで、DBAPI 2.0が指定されている場合は明確に定義されていない接続またはカーソルは、それぞれのclose()
メソッドが行われなければならないものです。それだけで
<module>.connect()
のインスタンスを返す必要があります
<module>.Connection
、 それ
<module>.Connection.cursor()
のインスタンスを返す必要があります
<module>.Cursor
、および
<module>.Cursor.execute()
指定された行を指定して返すステートメントを呼び出して戻ってください。特に、Aは定義されません
<module>.Connection.execute()
しかしながら、特定の実装はそれらを拡張子として自由に実装することが自由である。
これらの拡張に応じて、おそらく賢明ではありませんが、それはあなたがポータブルコードとして持っていないことを意味します。 DBAPIは、中間オブジェクトなしで接続を実行することが一部のデータベースでは困難になる可能性があるため、この2レベルの要件を行います。
Connectionオブジェクトはデータベースへの接続で、データベースと全くデータベースと話しているときに閉じます。カーソルオブジェクトは、クエリから結果セットの上のイテレータです。その結果セットで完了したらそれらを閉じます。