![](/img/trans.png)
[英]ERROR in python sql code : 1054 (42S22): Unknown column 'z' in 'field list'
[英]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.