




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第python使用pymysql操作MySQL錯誤代碼1054和1064處理方式目錄錯誤代碼1064處理錯誤代碼1054處理最近在學習用Python爬蟲,需要用到mysql來存儲從網絡上爬到的數據,這里我也是借助了pymysql來操作mysql數據庫,但是在實際寫代碼操作數據庫的過程中遇到了好多坑(改到我懷疑人生。。。),這里記錄下我排雷的過程,也供大家來參考,希望對你們有所幫助。
錯誤代碼1064處理
這個錯誤可以說是我在編寫整個代碼的遇到的最大的錯誤,沒有之一!這里為了說明這個錯誤的情況,我將原來的部分代碼經過精簡過來舉例子。麻雀雖小,五臟俱全,話不多說,首先貼上我的渣渣代碼(手動捂臉~)。
importpymysql
if__name__=='__main__':
connect=pymysql.connect(host='***.***.***.***',user='****',passwd='***',port=3306,database='test',charset='utf8')
cursor=connect.cursor()
table_name='person'
values='idintprimarykeyauto_increment,namevarchar(20)'
cursor.execute('createtable%s(%s)',(table_name,values))
cursor.close()
connect.close()
這里請自行將上面星號的部分替換成自己的信息,首先將自己的MySQL主機地址,用戶名和密碼。
運行上面的代碼,程序運行錯誤,錯誤代碼提示為1064,錯誤提示為
pymysql.err.ProgrammingError:(1064,YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenearperson(idintprimarykeyauto_increment,namevarchar(20))atline1)
上面的錯誤提示告訴我們在SQL語句的第一行出現了語法錯誤。
最初是認為SQL拼寫錯誤,仔細檢查后拼寫正確。后來經過查閱相關文檔和資料,發現自己犯了一個非常惡心的一個錯誤,原因竟然是將一個用百分號誤用成了逗號!竟然都沒有語法錯誤,下面的程序我們使用mogrify函數可以輸出待執行的完整SQL語句,來對比下:
importpymysql
if__name__=='__main__':
connect=pymysql.connect(host='***.***.***.***',user='****',passwd='***',port=3306,database='test',charset='utf8')
cursor=connect.cursor()
table_name='person'
values='idintprimarykeyauto_increment,namevarchar(20),ageint'
sql_1=cursor.mogrify('createtable%s(%s)',(table_name,values))
sql_2=cursor.mogrify('createtable%s(%s)'%(table_name,values))
print(sql_1)
print(sql_2)
cursor.close()
connect.close()
執行上面的代碼,我們可以看一下輸出結果:
createtableperson(idintprimarykeyauto_increment,namevarchar(20),ageint)
createtableperson(idintprimarykeyauto_increment,namevarchar(20),ageint)
對比上面的輸出結果,我們可以發現上面的2個語句雖然沒有都沒有語法錯誤,但是構造出來的SQL語句大體上看也是差不多的,唯一的區別就在于:兩者構造的SQL的引號的差別?。?,通過第一種方式構造出來的SQL語句是帶有引號的,第二種是沒有引號的。很明顯,可以在MySQL終端下運行的第二種SQL語句,沒想到自己鼓搗了半天的錯誤竟然是引號的問題(心里一萬只草泥馬在奔騰)。
這里我根據自己的理解總結一下這兩者的區別吧,不對的地方還請大佬們批評指正:
1.對于上面的使用逗號作為分隔符的調用,構造出來的語句是直接將字符串替換掉SQL語句的占位符的,并且不會將引號去掉,會直接進行替換,這種做法會引起SQL語法錯誤,執行失敗。
2.對于上面使用百分號作為分隔符的調用,構造出來的語句是將字符串的內容替換掉占位符(這種方式最常見),并不會將引號去掉,只將內容替換掉,這種做法會引起SQL語法錯誤,執行失敗。
錯誤代碼1054處理
解決了上面的錯誤,本來以為整個程序可以順利執行。當執行到SQL的插入語句時,發現整個程序又無情地給了我一個大大的error,又是一個全新的錯誤(錯誤代碼1054),為了能夠比較清晰的說明錯誤情況,我還是給出一個簡化的程序,同時又能說明情況。
首先我們來一下示例中用到的person表的結構:
下面我的示例代碼
importpymysql
if__name__=='__main__':
connect=pymysql.connect(host='***.***.***.***',user='****',passwd='***',port=3306,database='test',charset='utf8')
cursor=connect.cursor()
table_name='person'
values=(23,'李明')
cursor.execute('insertinto%s(age,name)values(%s,%s)'%(table_name,values[0],values[1]))
cursor.close()
connect.close()
執行上面的代碼,程序又報錯了,錯誤代碼提示為1054,錯誤提示為:
pymysql.err.InternalError:(1054,Unknowncolumn李明infieldlist)
上面的錯誤提示沒有什么我插入的值在fieldlist中不存在。什么鬼,這段代碼這么簡單,還會有錯。又是搜索各種解決方法還是無解。最終還是通過pymysql中的mogrify函數還看一下構造的SQL語句,下面的代碼可以查看我們實際構造的SQL到底是什么:
importpymysql
if__name__=='__main__':
connect=pymysql.connect(host='***.***.***.***',port=3306,user='****',passwd='*****',database='test',charset='utf8')
cursor=connect.cursor()
table_name='person'
values=(23,'韓梅梅')
sen=cursor.mogrify('insertinto%s(age,name)values(%s,%s)'%(table_name,values[0],values[1]))
print(sen)
cursor.close()
connect.close()
上面的代碼輸出我們實際傳給MySQL執行的SQL語句,程序的輸出結果為:
insertintoperson(age,name)values(23,韓梅梅)
程序的輸出結果直覺看貌似是對的,沒有任何錯誤,但是在MySQL的終端下會報相同的錯誤,同樣找不到。后來經過恍然大悟,原來又是因為引號的問題,上面正確的SQL語句應該是
insertintoperson(age,name)values(23,韓梅梅)
原來又是因為的錯誤才導致程序的錯誤。之所以出現上面的情況可以用上述解釋錯誤1064的錯誤原因來解釋:
使用百分號來作為分隔符只會簡單地將字符串的內容進行替換,而不會進行自動給字符串加上引號,因此上面構造的SQL語句是沒有加引號的,而我們SQL語句中待插入的值是需要加引號的,因此引發1054的錯誤。
經過上面的分析,我們可以給待在execute函數中給待插入的字符串手動加上引號來解決,下面貼上正確的代碼:
importpymysql
if__name__=='__main__':
connect=pymysql.connect(host='***.***.***.***',port=3306,user='****',passwd='*****',database='test',charset='utf8')
cursor=connect.cursor()
table_name='person'
values=(23,'韓梅梅')
sen=cursor.mogrify('insertinto%s(age,name)values(%s,"%s")'%(table_name,values[0],values[1]))#相比上面的錯
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安全評價師(高級)職業技能鑒定案例分析解析冊
- 2025年消防執業資格考試題庫:消防應急救援戰例分析實戰演練試卷
- 2025年美術教師編制考試模擬試卷:美術教育心理學研究與應用試題
- 2025年CPE考試試卷:寫作思路引導與2025年考試熱點話題分析
- 語文課上難忘的一件事周記(13篇)
- 2025年輕油蒸汽轉化催化劑項目提案報告
- 2025年草除靈乙酯項目申請報告
- 2025年一建考試機電工程經濟與造價管理實戰案例分析試題卷
- 2025年物業管理師考試物業管理物業設施運行管理實施改進報告反思試卷
- 在閱讀中發現美好閱讀感悟作文8篇
- 超星爾雅學習通《形勢與政策》2025春章節測試附答案
- 廣東省廣州市越秀區2025年中考一模歷史模擬試題(含答案)
- 有效咳嗽訓練操作流程
- 小學古詩文教育的創新教學方法與實踐
- 消防安裝抗震支架施工方案
- 財務合規培訓課件
- 云南xx城鎮老舊小區改造項目可行性研究報告
- 企業內部停車位分配方案
- 湖南省長沙市雅禮實驗高中-主題班會-把學習變為熱愛:內驅力【課件】
- 2025年中考英語總復習:補全對話 練習題匯編(含答案解析)
- 醫學細胞生物學(溫州醫科大學)知到智慧樹章節答案
評論
0/150
提交評論