繁体   English   中英

SQL错误1054,带有占位符的Python中的“'字段列表'中的未知列'xxxxx'”

[英]SQL error 1054, “Unknown column 'xxxxx' in 'field list'” in Python with placeholders

我是使用Python的mySQL的新手,尝试使用Python友好的占位符('%s')执行预先准备的SQL INSERT语句时,遇到了常见的1054错误

我知道正常的解决方案是添加引号来代替反引号,或者如果缺少插入值则添加引号,但是我对cols和vals元组进行了检查,我可以看到它们包含在其中单引号,所以我有点困惑为什么会发生此错误。

下面是我的代码片段:(顺便说一句,“ cols”和“ vals”是字符串的元组(强调字符串:))

首先,我添加列名称:

for item in cols:
    try:
        # First add columns if not already present
        query = "ALTER TABLE Parameters ADD COLUMN %s VARCHAR(200)" % (str(item))

        cursor.execute(query)
        connection.commit()
    except:
        pass

然后,我尝试添加值:

sql = "INSERT INTO Parameters ({0}) VALUES ({1})".format(', '.join(cols), ', '.join(['%s'] * len(cols)));
    try:
        cursor.execute(sql, vals)

    except Exception as e:
        print(e)

    connection.close()

有时没有问题,但否则我会收到此错误:

(1054, "Unknown column 'ColumnName' in 'field list'")

我的Python语句是否完全不正确,并且占位符不是最佳实践? 我使用占位符,因为我的列表很大。

这是SQL语句打印的精简版。

    INSERT INTO Parameters (TestID, Dev_Type, Version, MAC, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, DayActNxtDateTime, XXXX) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)

错误:

(1054, "Unknown column 'DayActNxtDateTime' in 'field list'")

似乎您在问如何解决问题?

INSERT INTO Parameters ({0}) VALUES ({1})

错误报告您在({0})中有一个名为“ ColumnName”的字段,但未在表Parameters中定义。

尝试:

SHOW CREATE TABLE parameters;

并确保您的表包含该字段。

如果仍然有问题,请打印出异常处理程序中的所有sql:

print(e)
print(sql)

然后,我将运行tcpdump以确保sql字符串没有被任何库错误地处理。

sudo tcpdump -A -i lo0 dst port 3306

然后运行您的脚本。

感谢@Gordon Linoff和@Shuo的所有帮助。 事实证明,我愚蠢的SQL语句版本具有误导性。 我尝试使用SQL命令行直接手动添加列以找到答案。

原来,我的某些列名超出了SQL规定的64个字符的限制(这些列名是通过编程生成的),因此为什么循环有时起作用而其他时候却没有。 不知道SQL中是否有一种方法可以缩短列标题,我快速浏览了一下COMPRESS方法?

同时,我创建了一个Python字典来捕获创建时这些额外的长列名称,并将它们映射到手动创建的替代值,我想现在它将这样做。 再次感谢您提供指导。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM