由于 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 将字符串视为列名,因此无法运行查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL-数据操作-增删改查

SQL 字符串或二进制数据将被截断,列名

MySQL学习笔记1(增删查改)

PHP & MySQL数据库专题 第三课 增删改查

Mysql数据库安装使用教程08:数据操作——增删改查字符集校对规则

如何在mysql中获取值不为null的列名