gpt4 book ai didi

python - 我应该在 python MySQLdb 模块中重用游标吗

转载 作者:IT老高 更新时间:2023-10-28 21:03:17 26 4
gpt4 key购买 nike

我正在编写一个 python CGI 脚本来查询 MySQL 数据库。我正在使用 MySQLdb 模块。由于会重复查询数据库,所以我写了这个函数....

def getDatabaseResult(sqlQuery,connectioninfohere):
# connect to the database
vDatabase = MySQLdb.connect(connectioninfohere)
# create a cursor, execute and SQL statement and get the result as a tuple
cursor = vDatabase.cursor()
try:
cursor.execute(sqlQuery)
except:
cursor.close()
return None
result = cursor.fetchall()
cursor.close()
return result

我的问题是...这是最佳做法吗?我应该在我的函数中重用我的光标吗?例如。哪个更好...

def callsANewCursorAndConnectionEachTime():
result1 = getDatabaseResult(someQuery1)
result2 = getDatabaseResult(someQuery2)
result3 = getDatabaseResult(someQuery3)
result4 = getDatabaseResult(someQuery4)

或完全取消 getDatabaseeResult 函数并执行类似的操作..

def reusesTheSameCursor():
vDatabase = MySQLdb.connect(connectionInfohere)
cursor = vDatabase.cursor()

cursor.execute(someQuery1)
result1 = cursor.fetchall()

cursor.execute(someQuery2)
result2 = cursor.fetchall()

cursor.execute(someQuery3)
result3 = cursor.fetchall()

cursor.execute(someQuery4)
result4 = cursor.fetchall()

最佳答案

MySQLdb 开发人员建议构建一个特定于应用程序的 API,该 API 可以为您执行数据库访问,这样您就不必担心应用程序代码中的 mysql 查询字符串。它将使代码更具可扩展性 (link)。

至于游标,我的理解是最好的办法是为每个操作/事务创建一个游标。因此,某些 check value -> update value -> read value 类型的事务可以使用相同的游标,但对于下一个游标,您将创建一个新游标。这再次指向为 db 访问构建内部 API 的方向,而不是使用通用的 executeSql 方法。

还记得关闭游标,并在查询完成后提交对连接的更改。

您的 getDatabaseResult 函数不需要为每个单独的查询建立连接。只要您对游标负责,就可以共享查询之间的连接。

关于python - 我应该在 python MySQLdb 模块中重用游标吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com