【问题标题】:Not able to run the query since mysql is considering the string as column name由于 mysql 将字符串视为列名,因此无法运行查询
【发布时间】: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。感谢您的宝贵时间。

标签: python mysql sql


【解决方案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。最良好的祝愿。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2021-10-07
    • 1970-01-01
    • 2019-08-08
    相关资源
    最近更新 更多