1

データベースにデータを保存するスクリプトを作成しています。初めてPostgeSQLを使用していますが、すべてが計画どおりにうまくいきます。PostgreSQl での Cursor の使用法について考えていましたが、1 つでも十分なのに、たくさん作っているとどうなるでしょうか。しかし、すべての SQL 関数にカーソルを渡したくありません。

これが私の簡単な例です。

dbConn, dbCurs = openDataBase(config)
doSomeThing(dbCurs, name, age, listOfJohns)

def doSomething(dbCurs, name, age, listOfPoeple):
  listOfPoeple SQLnrOfPeopleNamed(dbCurs, name, age)
  #here some fine checking if there's a list
  #room for more code. etc. etc.

def SQLnrOfPeopleNamed(dbCurs, inpName, inpAge)
  dbCurs.execute(Some SQL-thingy)
  #check and return result

dbCurs は、SQL クエリを含むすべての関数に渡される値です。現在、dbCurs は非常に PostgreSQL 固有です。このデータベースを eq MySQL に変更するたびに、クエリ関数 SQLnrOfPeople とこれらの関数へのインターフェイスを書き直す必要があります。

SQL 関数の機能を書き直すだけでよい状況が必要です。そこで、すべての SQL 関数で Cursor クラスを作成して閉じることを考えていました。これにより、接続のみが必要な、より一般的なインターフェイスになります。

dbConn = openDataBase(config)
doSomeThing(dbConn, name, age, listOfJohns)

def doSomething(dbConn, name, age, listOfPoeple):
  listOfPoeple SQLnrOfPeopleNamed(dbConn, name, age)
  #here some fine checking if there's a list
  #room for more code. etc. etc.

def SQLnrOfPeopleNamed(dbConn, inpName, inpAge)
   dbCurs = dbConn.cursor()
   dbCurs.execute(Some SQL-thingy)
   #check and return result

しかし、さらにカーソルを作成して閉じます。大丈夫なはずのマニュアルを読みましたが、これは良い解決策だと思います。しかし、私はまだそれについて少し疑問を持っています。

4

1 に答える 1

0

一般に、複数のカーソルを順番に開いたり閉じたりしても問題はありません。カーソルは、基本的にクエリ結果セットへのポインター (キャッシュされたデータへのポインターのセット) と考えることができます。カーソルを開くとポインタが割り当てられ、カーソルを閉じるとメモリが解放されます。

一般に、ここでは論理的なクリーンさが最善であると考えているため、クエリごとに 1 つのカーソルを使用するのが適切です。

于 2013-04-02T10:20:29.017 に答える