Я использую MySQLdb для загрузки большого количества данных из текстовых файлов на сервер MySQL. Это прекрасно работает, если я вручную готовлю строку, такую как 'as', '123', 12, 23
, но я не могу понять, как перебрать список, чтобы сгенерировать это, так как мне нужно объединить строки и целые числа.
Пример оператора вставки, который работает следующим образом:
""" INSERT INTO ACS(ST, CODE, BC001, BC002, BC003)
VALUES ('AK', '1234567', 20, 30, 40)"""
Вот как я пытался сгенерировать это утверждение из списка:
import MySQLdb
# sample data
table = 'TestTable'
header = ['ST', 'CODE', 'BC001', 'BC002', 'BC003']
values = [['AA', '1234567', 20, 30, 40], ['BB', '1234567', 20, 30, 40], ['CC', '1234567', 20, 30, 40],['DD', '1234567', 20, 30, 40]]
# local SQL server on my computer
db = MySQLdb.connect (host = 'localhost', user = 'root', passwd = '', db = 'test')
# prepare a cursor object using cursor() method
cursor = db.cursor()
# header columns
sql1 = '('
for i in range(len(header)):
sql1 += header[i] + ','
sql1 = 'INSERT INTO ' + table + sql1[:-1] + ')'
# now loop through data values and combine with header each time
for i in range(len(values)):
sql2 = ''
for j in range(len(values[i])):
sql2 += values[i][j] + ',' #error occurs here
# structure: sql2 = """ VALUES ('AA', '1234567', 20, 30, 40)"""
sql2 = 'VALUES ' + table + sql2[:-1] + ')'
sql = sql1 + sql2
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# disconnect from server
db.close()
Я получаю сообщение об ошибке
TypeError: unsupported operand type(s) for +: 'int' and 'str'
и я понимаю, почему это происходит, но я не могу найти альтернативный способ генерации строки. Есть ли лучший способ производства этих строк?
Я использую Python27 на 64-битной Win7.