Я пытаюсь написать скрипт, который читает текстовый файл с разделителями табуляции, сначала создает таблицу mysql, а затем вставляет данные в эту таблицу.
Проблема: я застрял при написании запроса INSERT, потому что заполнитель% s служит новой цели с помощью mysql.connector API. Вот мой код:
def insertmanyquery(tabletitle, headers, values):
'''connects to a mysql database and inserts a list of tab delimited rows into a table'''
cnxn = connect(all the connection parameters)
cursor = cnxn.cursor()
numofvalues = r"%s, " * len(headers.split(','))
numofvalues = numofvalues[:-2]
query = "INSERT INTO %s (%s) VALUES (%s)" % (tabletitle, headers, numofvalues)
cursor.executemany(query,values)
cnxn.commit()
cursor.close()
cnxn.close()
Мы надеемся, что это позволит адаптировать запрос вставки к тому, сколько столбцов присутствует в таблице.
Если я вызываю функцию следующим образом:
tabletitle = 'Bikes'
headers = 'BikeBrand, BikeName, Purpose, Price, YearPurchased'
values = ['Norco', 'Range', 'Enduro', 8,000.00, 2018]
insertmanyquery(tabletitle, headers, values)
Я получаю следующую ошибку: mysql.connector.errors.ProgrammingError: Не все параметры были использованы в операторе SQL
Если я просто распечатаю запрос вместо его выполнения, он выглядит хорошо:
INSERT INTO Bikes (BikeBrand, BikeName, назначение, цена, год, приобретенный) ЗНАЧЕНИЯ (% s,% s,% s,% s,% s)
Я полагаю, что получаю эту ошибку, потому что третий% s в моем запросе INSERT интерпретируется как часть синтаксиса INSERT коннектора, а не интерпретируется сначала с использованием питона, а затем интерпретируется как синтаксис коннектора.
Я очень новичок в кодировании, так что, возможно, я неправильно все подхожу, несмотря на то, что я хотел бы услышать о потенциальных решениях этой проблемы или о лучших способах ее кодирования.
Спасибо за ваше время
UPDATE:
Я попытался сделать запрос query = "INSERT INTO %s (%s)" % (tabletitle, headers) + " VALUES (" + numofvalues +");"
, и я все еще получаю ту же ошибку! так что это не связано с использованием заполнителя ..>. <</p>