python-2.7.15, pymssql-2.1.4, SQL_Server-2018, Windows 10 Pro, MS-Office-2016
import time
import csv
import pymssql
db_settings = {
"host" : "127.0.0.1",
"port" : "1433",
"user" : "sa",
"password" : "********",
"database" : "testdb",
"charset" : "utf8"
}
conn = pymssql.connect(**db_settings)
cursor = conn.cursor()
ff = csv.reader(open('base.csv', 'r'))
sql = """
BEGIN
INSERT INTO Base([name], [year], [update], [status],
[timeline], [language], [pic]) VALUES (%s, %s, %s, %s, %s, %s, %s)
END
"""
now=time.strftime("%M:%S")
t = []
for i in ff:
i = i[1:]
if "year" in i:
pass
else:
t.append((i[0], i[1], i[3], i[4], i[6], i[5], i[8]))
cursor.executemany(sql, t)
conn.commit()
end=time.strftime("%M:%S")
print(now+","+end)
Размер файла base.csv - 21,7 МБ, 30374 строки. Когда я выполню приведенный выше код, это займет 929 секунд. Это означает, что всего 32,7 строки в секунду, это слишком медленно. Кто может мне помочь выяснить причину? Большое спасибо. :-)
next(ff, None)
перед входом в циклfor i in ff:
. Таким образом, вам не нужно проверять каждую последующую строку. И вы действительно вставляете в экземпляр локальной базы данных (127.0.0.1)? Когда я делаю это для 100 000 строк x 4 столбца, я получаю около 695 строк в секунду с pymssql (и около 5000 строк в секунду с pyodbc, драйвером ODBC 17 для SQL Server иfast_executemany=True
). - person Gord Thompson   schedule 12.05.2019