Python / MySQL: использование% s в питонической манере вместо mysql.connector в инструкции INSERT - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь написать скрипт, который читает текстовый файл с разделителями табуляции, сначала создает таблицу 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>

...