Python 无法运行查询,因为mysql将字符串视为列名

Python 无法运行查询,因为mysql将字符串视为列名,python,mysql,sql,Python,Mysql,Sql,我正在尝试使用列表中存储的数据将数据插入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_i

我正在尝试使用列表中存储的数据将数据插入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”


提前谢谢

如果使用%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']))

如果使用%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']))

使用%s占位符请参见


使用%s占位符请参见


代替值
({fac},{sub},{name},{roll})
需要使用
值(%s,%s,%d)
代替值
({fac},{sub},{name},{roll})
需要使用
值(%s,%s,%d)
字符串文字必须用引号括起来。试试
。。值({fac}、{sub}、{name}、{roll})
(由于数值原因,roll没有被引用)尝试使用双引号保护列,使用单引号保护字符串。如果您需要在python字符串中转义引号,请使用
\
。非常感谢@Akina。我花了几个小时试图连接那些撇号。谢谢你的帮助。是的,我会记住的@AlexanderEble。谢谢您的时间。字符串文字必须用引号括起来。试试
。。值({fac}、{sub}、{name}、{roll})
(由于数值原因,roll没有被引用)尝试使用双引号保护列,使用单引号保护字符串。如果您需要在python字符串中转义引号,请使用
\
。非常感谢@Akina。我花了几个小时试图连接那些撇号。谢谢你的帮助。是的,我会记住的@AlexanderEble。谢谢你的时间。非常感谢,它成功了!!非常感谢,成功了!!谢谢占位符和撇号正在工作。谢谢您的时间。谢谢占位符和撇号正在工作。谢谢您的时间。谢谢,它正在工作,而且占位符也证明比字符串格式更容易使用。是的。非常欢迎@TanmayPardhi。致以最良好的祝愿。感谢它的工作和占位符也被证明是更容易使用比字符串格式。是的。非常欢迎@TanmayPardhi。最美好的祝福。