




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第python使用pymysql操作MySQL錯(cuò)誤代碼1054和1064處理方式目錄錯(cuò)誤代碼1064處理錯(cuò)誤代碼1054處理最近在學(xué)習(xí)用Python爬蟲,需要用到mysql來存儲(chǔ)從網(wǎng)絡(luò)上爬到的數(shù)據(jù),這里我也是借助了pymysql來操作mysql數(shù)據(jù)庫(kù),但是在實(shí)際寫代碼操作數(shù)據(jù)庫(kù)的過程中遇到了好多坑(改到我懷疑人生。。。),這里記錄下我排雷的過程,也供大家來參考,希望對(duì)你們有所幫助。
錯(cuò)誤代碼1064處理
這個(gè)錯(cuò)誤可以說是我在編寫整個(gè)代碼的遇到的最大的錯(cuò)誤,沒有之一!這里為了說明這個(gè)錯(cuò)誤的情況,我將原來的部分代碼經(jīng)過精簡(jiǎn)過來舉例子。麻雀雖小,五臟俱全,話不多說,首先貼上我的渣渣代碼(手動(dòng)捂臉~)。
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()
這里請(qǐng)自行將上面星號(hào)的部分替換成自己的信息,首先將自己的MySQL主機(jī)地址,用戶名和密碼。
運(yùn)行上面的代碼,程序運(yùn)行錯(cuò)誤,錯(cuò)誤代碼提示為1064,錯(cuò)誤提示為
pymysql.err.ProgrammingError:(1064,YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenearperson(idintprimarykeyauto_increment,namevarchar(20))atline1)
上面的錯(cuò)誤提示告訴我們?cè)赟QL語(yǔ)句的第一行出現(xiàn)了語(yǔ)法錯(cuò)誤。
最初是認(rèn)為SQL拼寫錯(cuò)誤,仔細(xì)檢查后拼寫正確。后來經(jīng)過查閱相關(guān)文檔和資料,發(fā)現(xiàn)自己犯了一個(gè)非常惡心的一個(gè)錯(cuò)誤,原因竟然是將一個(gè)用百分號(hào)誤用成了逗號(hào)!竟然都沒有語(yǔ)法錯(cuò)誤,下面的程序我們使用mogrify函數(shù)可以輸出待執(zhí)行的完整SQL語(yǔ)句,來對(duì)比下:
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()
執(zhí)行上面的代碼,我們可以看一下輸出結(jié)果:
createtableperson(idintprimarykeyauto_increment,namevarchar(20),ageint)
createtableperson(idintprimarykeyauto_increment,namevarchar(20),ageint)
對(duì)比上面的輸出結(jié)果,我們可以發(fā)現(xiàn)上面的2個(gè)語(yǔ)句雖然沒有都沒有語(yǔ)法錯(cuò)誤,但是構(gòu)造出來的SQL語(yǔ)句大體上看也是差不多的,唯一的區(qū)別就在于:兩者構(gòu)造的SQL的引號(hào)的差別??!,通過第一種方式構(gòu)造出來的SQL語(yǔ)句是帶有引號(hào)的,第二種是沒有引號(hào)的。很明顯,可以在MySQL終端下運(yùn)行的第二種SQL語(yǔ)句,沒想到自己鼓搗了半天的錯(cuò)誤竟然是引號(hào)的問題(心里一萬只草泥馬在奔騰)。
這里我根據(jù)自己的理解總結(jié)一下這兩者的區(qū)別吧,不對(duì)的地方還請(qǐng)大佬們批評(píng)指正:
1.對(duì)于上面的使用逗號(hào)作為分隔符的調(diào)用,構(gòu)造出來的語(yǔ)句是直接將字符串替換掉SQL語(yǔ)句的占位符的,并且不會(huì)將引號(hào)去掉,會(huì)直接進(jìn)行替換,這種做法會(huì)引起SQL語(yǔ)法錯(cuò)誤,執(zhí)行失敗。
2.對(duì)于上面使用百分號(hào)作為分隔符的調(diào)用,構(gòu)造出來的語(yǔ)句是將字符串的內(nèi)容替換掉占位符(這種方式最常見),并不會(huì)將引號(hào)去掉,只將內(nèi)容替換掉,這種做法會(huì)引起SQL語(yǔ)法錯(cuò)誤,執(zhí)行失敗。
錯(cuò)誤代碼1054處理
解決了上面的錯(cuò)誤,本來以為整個(gè)程序可以順利執(zhí)行。當(dāng)執(zhí)行到SQL的插入語(yǔ)句時(shí),發(fā)現(xiàn)整個(gè)程序又無情地給了我一個(gè)大大的error,又是一個(gè)全新的錯(cuò)誤(錯(cuò)誤代碼1054),為了能夠比較清晰的說明錯(cuò)誤情況,我還是給出一個(gè)簡(jiǎn)化的程序,同時(shí)又能說明情況。
首先我們來一下示例中用到的person表的結(jié)構(gòu):
下面我的示例代碼
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()
執(zhí)行上面的代碼,程序又報(bào)錯(cuò)了,錯(cuò)誤代碼提示為1054,錯(cuò)誤提示為:
pymysql.err.InternalError:(1054,Unknowncolumn李明infieldlist)
上面的錯(cuò)誤提示沒有什么我插入的值在fieldlist中不存在。什么鬼,這段代碼這么簡(jiǎn)單,還會(huì)有錯(cuò)。又是搜索各種解決方法還是無解。最終還是通過pymysql中的mogrify函數(shù)還看一下構(gòu)造的SQL語(yǔ)句,下面的代碼可以查看我們實(shí)際構(gòu)造的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()
上面的代碼輸出我們實(shí)際傳給MySQL執(zhí)行的SQL語(yǔ)句,程序的輸出結(jié)果為:
insertintoperson(age,name)values(23,韓梅梅)
程序的輸出結(jié)果直覺看貌似是對(duì)的,沒有任何錯(cuò)誤,但是在MySQL的終端下會(huì)報(bào)相同的錯(cuò)誤,同樣找不到。后來經(jīng)過恍然大悟,原來又是因?yàn)橐?hào)的問題,上面正確的SQL語(yǔ)句應(yīng)該是
insertintoperson(age,name)values(23,韓梅梅)
原來又是因?yàn)榈腻e(cuò)誤才導(dǎo)致程序的錯(cuò)誤。之所以出現(xiàn)上面的情況可以用上述解釋錯(cuò)誤1064的錯(cuò)誤原因來解釋:
使用百分號(hào)來作為分隔符只會(huì)簡(jiǎn)單地將字符串的內(nèi)容進(jìn)行替換,而不會(huì)進(jìn)行自動(dòng)給字符串加上引號(hào),因此上面構(gòu)造的SQL語(yǔ)句是沒有加引號(hào)的,而我們SQL語(yǔ)句中待插入的值是需要加引號(hào)的,因此引發(fā)1054的錯(cuò)誤。
經(jīng)過上面的分析,我們可以給待在execute函數(shù)中給待插入的字符串手動(dòng)加上引號(hào)來解決,下面貼上正確的代碼:
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]))#相比上面的錯(cuò)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 霸王合同協(xié)議書
- 挖井合同協(xié)議書
- 合同無效賠償協(xié)議書
- 2025年醫(yī)療信息化建設(shè)與政策影響分析報(bào)告
- 管材合同協(xié)議書
- 織物視覺效果與市場(chǎng)需求的關(guān)系試題及答案
- 合同更換協(xié)議書
- 基層醫(yī)療衛(wèi)生服務(wù)能力提升與2025年基層醫(yī)療機(jī)構(gòu)公共衛(wèi)生服務(wù)均等化研究
- 合同股份轉(zhuǎn)讓協(xié)議書模本
- 腫瘤的測(cè)試題及答案
- 合資公司成立可行性研究報(bào)告范文
- 2025年中國(guó)電子產(chǎn)品租賃行業(yè)市場(chǎng)占有率及投資前景預(yù)測(cè)分析報(bào)告
- 2025年中國(guó)亮白防蛀固齒牙膏市場(chǎng)調(diào)查研究報(bào)告
- 上甘嶺戰(zhàn)役課件
- 黑龍江省齊齊哈爾市普高聯(lián)誼校2022-2023學(xué)年高一下學(xué)期語(yǔ)文期末試卷(含答案)
- (二模)2025年深圳市高三年級(jí)第二次調(diào)研考試物理試卷(含標(biāo)準(zhǔn)答案)
- 2025年陜西省初中學(xué)業(yè)水平考試英語(yǔ) 例析與指導(dǎo) 試卷示例題
- 廣東省廣州市越秀區(qū)2025年中考一模歷史模擬試題(含答案)
- 汽車起重機(jī)日常檢查維修保養(yǎng)記錄表
- 出廠檢驗(yàn)報(bào)告or合格證模板
- 湖南省普通高等學(xué)校畢業(yè)生就業(yè)協(xié)議書
評(píng)論
0/150
提交評(píng)論