Пробел в SQL приводит к разрыву производительности в 100 раз, почему?

Я пытаюсь использовать pymysql.executemany для множественной вставки.

Но чем меньше пробела после VALUES в sql, тем больше время работы. Почему это?

Вот мой код, проверьте две функции run.

import pymysql.cursors

from functools import wraps
from datetime import datetime


def running_time(func):
    @wraps(func)
    def deco():
        t0 = datetime.now()
        res = func()
        t1 = datetime.now()
        print(t1 - t0)
        return res
    return deco


CONFIG = {
    'host': 'localhost',
    'port': 3306,
    'user': 'root',
    'password': '',
    'db': 'test',
    'charset': 'utf8',
    'cursorclass': pymysql.cursors.DictCursor,
    'autocommit': True,
}
connection = pymysql.connect(**CONFIG)
cur = connection.cursor()


@running_time
def run():
    sql = """INSERT INTO table_name(c) VALUES (%s)"""
    for i in range(100):
        param = ['1'] * 2000
        cur.executemany(sql, param)
run()


@running_time
def run():
    sql = """INSERT INTO table_name(c) VALUES(%s)"""
    for i in range(100):
        param = ['1'] * 2000
        cur.executemany(sql, param)
run()

выходы:

0:00:02.765183

0:01:13.729428


person panda0    schedule 27.09.2017    source источник
comment
Подобный вопрос был опубликован ранее. Обратитесь к этому разделу: ссылка   -  person    schedule 27.09.2017
comment
Я думаю, что это не та же проблема. Меня смущает синтаксис sql, а не значение данных.   -  person panda0    schedule 27.09.2017


Ответы (1)


Это ошибка pymysql.

Проверьте это: не разрешать пробелы между VALUES и ( при массовой вставке/замене #597

person panda0    schedule 27.09.2017