Должен ли я повторно использовать объект курсора или создать новый с помощью mysql.connector? - PullRequest
0 голосов
/ 05 мая 2019

Следует ли повторно использовать объект курсора или создать новый объект для каждого запроса?

Повторное использование курсора:

    # 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 Ответ

1 голос
/ 10 мая 2019

Если вы используете MySQL Connector / Python , cursor = db.cursor() создаст новый экземпляр CMySQLCursor (или MySQLCursor, если вы используете чистую версию Python).Таким образом, для вашего первого примера вы создадите 50 000 экземпляров курсора.Вам просто нужен один курсор.Откройте и закройте курсор вне цикла for (используйте ваш первый пример).

...