1

我正在构建一个脚本来将一些数据存储在数据库中。我第一次使用 PostgeSQL,一切都按计划进行。我正在考虑在 PostgreSQl 中使用光标,以及如果我制作很多光标而一个就足够了怎么办。但我不想将光标传递给我所有的 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

一般来说,顺序打开和关闭多个游标完全没有问题。您可以将游标视为基本上是指向查询结果集的指针(它是一组指向缓存数据的指针)。打开游标分配一个指针,关闭一个指针释放内存。

一般来说,我认为逻辑清洁度在这里是最好的,所以每个查询都有一个游标是要走的路。

于 2013-04-02T10:20:29.017 回答