簡體   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