我正在尝试编写一个脚本,该脚本读取制表符分隔的文本文件,然后首先创建一个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>