由于 mysql 将字符串视为列名,因此无法运行查询
Posted
技术标签:
【中文标题】由于 mysql 将字符串视为列名,因此无法运行查询【英文标题】:Not able to run the query since mysql is considering the string as column name 【发布时间】:2021-05-13 15:47:56 【问题描述】:我正在尝试使用存储在列表中的数据将数据插入到我的 sql 表中 我使用的代码是:
for index, row in df.iterrows():
cursor.execute("INSERT INTO final_attendance (Fac_id,Subject,Name,roll_id) VALUES (fac, sub, name, roll)".format(
fac = row['Fac_id'],
sub = row['Subject'],
name = row['Name'],
roll = row['roll_id']))
但是当我运行这段代码时,sql 将存储在列表中的数据视为列名而不是普通的 Varchar
例如: 输入数据的正确sql语法是
INSERT INTO final_attendance (Fac_id, Subject, Name, roll_id)
VALUES ("PRD", "CSE", "Tanmay Pardhi", 59)
但是我的代码写的是
INSERT INTO final_attendance (Fac_id, Subject, Name, roll_id)
VALUES (PRD, CSE, Tanmay Pardhi, 59)
因此它将 PRD 视为列名 执行错误是“'字段列表中的未知列'PRD'”
提前致谢!
【问题讨论】:
字符串文字必须用引号括起来。试试.. VALUES ('fac', 'sub', 'name', roll)
(因为数值所以没有引用roll)
尝试用双引号保护列,用单引号保护字符串。如果您需要在 python 字符串中转义引号,请使用\
。
非常感谢@Akina。我花了几个小时试图连接那些撇号。感谢您的帮助。
是的,会记住这一点@AlexanderEble。感谢您的宝贵时间。
【参考方案1】:
使用 %s 占位符见manual
for index, row in df.iterrows():
cursor.execute("INSERT INTO final_attendance (Fac_id,Subject,Name,roll_id) VALUES (%s, %s, %s, %s)",(
row['Fac_id'],
row['Subject'],
row['Name'],
row['roll_id']))
【讨论】:
【参考方案2】:如果你使用 %s 它会处理字符串:
cursor.execute("INSERT INTO final_attendance (Fac_id,Subject,Name,roll_id) VALUES (%s, %s,%s,%s)",row['Fac_id'],row['Subject'],row['Name'],row['roll_id']))
【讨论】:
感谢占位符和撇号正在工作。感谢您的宝贵时间。【参考方案3】:而不是VALUES (fac, sub, name, roll)
需要使用values (%s, %s, %s, %d)
。
【讨论】:
感谢它的工作,占位符也被证明比字符串格式更容易使用。 是的。非常欢迎您@TanmayPardhi。最良好的祝愿。以上是关于由于 mysql 将字符串视为列名,因此无法运行查询的主要内容,如果未能解决你的问题,请参考以下文章