python - 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 +");"
,但仍然遇到相同的错误!所以它与使用占位符无关.. >.<
解决方案
推荐阅读
- javascript - JavaScript:如何将 for/of 循环转换为带有变量的普通 for 循环?
- javascript - 用于启用网络工作者的 react-app-rewired 无法构建
- python - 查找链接的 XPath 表达式给出“TypeError: Request url must be str or unicode, got NoneType”
- matlab - 如何从小波中获得时间和频率分辨率?
- visual-studio-2017 - VS2017 / VS2019 - SQL Server 数据库项目 - 加入用户定义的表类型会破坏架构验证
- python - 对使用 Multiprocessing.Queue 生成的结果进行排序
- javascript - 水平滚动中的图像被拉伸
- mysql - Mysql返回最大到最小的结果
- php - Laravel:如何将路线缓存 5 分钟?
- java - 克里斯蒂安的算法java同步时间错误