首页 > 解决方案 > Python/MySQL:在 INSERT 语句中以 Python 方式而不是 mysql.connector 方式使用 %s

问题描述

我正在尝试编写一个脚本来读取制表符分隔的文本文件并首先创建一个 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, Purpose, Price, YearPurchased) VALUES (%s, %s, %s, %s, %s)

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

我对编码很陌生,所以也许我在处理这一切都是错误的,无论如何,我想听听这个问题的潜在解决方案或更好的编码方法。

感谢您的时间

更新:

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

标签: pythonmysqlsqlconnector

解决方案


推荐阅读