我正在构建一个脚本来将一些数据存储在数据库中。我第一次使用PostgeSQL,一切顺利,按计划进行。我正在考虑在PostgreSQl中使用Cursor,如果我做了很多这样的话,那就足够了。但我不想将光标传递给我的所有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。每当我将此数据库更改为e.q. 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
但我会创建并关闭更多游标。我在手册中读到应该没问题,我认为这是一个很好的解决方案。但我对它仍然有点怀疑。
答案 0 :(得分:0)
一般来说,按顺序打开和关闭多个游标完全没有问题。您可以将游标视为基本上是指向查询结果集的指针(它是一组指向缓存数据的指针)。打开游标会分配一个指针,关闭一个指针会释放内存。
总的来说,我认为逻辑清洁度最好,因此每个查询都有一个游标是可行的。