我应该重新使用游标对象还是使用 mysql.connector 创建一个新对象?
Posted
技术标签:
【中文标题】我应该重新使用游标对象还是使用 mysql.connector 创建一个新对象?【英文标题】:Should I re-use cursor object or create a new one with mysql.connector? 【发布时间】:2019-09-23 01:05:04 【问题描述】:我应该重复使用游标对象还是为每个查询创建一个新的对象?
重用光标:
# we're going to connect to s3 and mysql
db = mysql_connect(host="localhost",
user="user",
passwd="pass",
database="db")
# Reusing the cursor
cursor = db.cursor()
# loop through all the files in the bucket one by one
for key in bucket.get_all_keys():
# the document id is the filename in the s3 bucket
doc_id = key.name.split("/")[-1]
cursor.execute("SELECT document_name FROM laws_docs WHERE id = %i", (doc_id,))
doc_name = cursor.fetchone()[0]
cursor.close()
- 或 -
每次新光标:
# we're going to connect to s3 and mysql
db = mysql_connect(host="localhost",
user="user",
passwd="pass",
database="db")
# loop through all the files in the bucket one by one
for key in bucket.get_all_keys():
# new cursor
cursor = db.cursor()
# the document id is the filename in the s3 bucket
doc_id = key.name.split("/")[-1]
cursor.execute("SELECT document_name FROM laws_docs WHERE id = %i", (doc_id,))
doc_name = cursor.fetchone()[0]
ursor.close()
这还重要吗?该循环将至少运行 50,000 次。
【问题讨论】:
【参考方案1】:如果您使用的是MySQL Connector/Python,cursor = db.cursor()
将创建一个新的CMySQLCursor
实例(如果您使用的是纯 Python 版本,则为 MySQLCursor
)。因此,对于您的第二个示例,您将创建 50,000 个游标实例。
您只需要一个光标。在for
循环之外打开和关闭光标(使用您的第一个示例)。
【讨论】:
以上是关于我应该重新使用游标对象还是使用 mysql.connector 创建一个新对象?的主要内容,如果未能解决你的问题,请参考以下文章