Python / MySQL:在INSERT语句中以pythonic方式而不是mysql.connector方式使用%s

时间:2019-03-21 20:56:20

标签: python mysql sql connector

我正在尝试编写一个脚本,该脚本读取制表符分隔的文本文件,然后首先创建一个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语句中使用了所有参数

如果我只是打印查询而不是执行查询,它看起来很好: 插入自行车(自行车品牌,自行车名称,用途,价格,购买的年份)值(%s,%s,%s,%s,%s)

我相信我会收到此错误,因为INSERT查询中的第三个%s被解释为连接器INSERT语法的一部分,而不是首先以pythonic方式解释,然后被解释为连接器语法。

我对编码非常陌生,所以也许我正在解决所有错误,无论如何,我想听听可能解决此问题的方法或更好的编码方法。

谢谢您的时间

更新:

我尝试进行查询query = "INSERT INTO %s (%s)" % (tabletitle, headers) + " VALUES (" + numofvalues +");",但仍然遇到相同的错误!因此与使用占位符无关。>> << / p>

0 个答案:

没有答案