Во-первых, вы закрываете курсор после первой же итерации. Поэтому у вас вообще не должно обрабатываться больше одной строки. Во-вторых, можно завернуть проблемный код в обработчик исключений и убедиться, что числовое поле действительно содержит ожидаемое значение и не содержит нечисловых символов:
import MySQLdb
import csv
csv_file = '/home/decoy/Downloads/police-department-calls-for-service.csv'
db_props = {
'host': '192.168.1.2',
'port': 3306,
'user': 'non-root-boy',
'passwd': '123456',
'db': 'sfpd'
}
query = ''''INSERT INTO sfpd(`Crime Id`, `Original Crime Type Name`,
`Report Date`, `Call Date`, `Offense Date`, `Call Time`,
`Call Date Time`, `Disposition`, `Address`, `City`, `State`, `Agency Id`,
`Address Type`, `Common Location`) VALUES("%d", "%s", "%s", "%s", "%s", "%s",
"%s", "%s", "%s", "%s", "%d", "%s")'''
with open(csv_file) as fh:
csv_f = csv.reader(fh)
with MySQLdb.connect(**db_props) as cur:
for row in csv_f:
try:
cur.execute(query, row)
except TypeError as exc:
field_val = row[-2]
if isinstance(field_val, str):
print(''.join(r'\x{0:02x}'.format(ord(c)) if c.isspace() or not c.isprintable() else c for c in field_val))
else:
raise
print ("Done")
И, в-третьих, непонятно почему предпоследнее поле таблицы БД имеет тип
varchar
, а вставить вы пытаетесь число.