2016-12-07 21 views
0

我有一個奇怪的問題。我在Excel中創建了一個vba代碼,它調用一個從Excel表單中獲取信息並將其放入數據庫的Python代碼。昨天沒有問題。今天我開始我的電腦,並嘗試在Python文件中的vba代碼和它的錯誤。python與fetchone的Msql連接給出錯誤

錯誤:

testchipnr = TC104 
Traceback (most recent call last): 
testchipID = 108 
File "S:/3 - Technical/13 - Reports & Templates/13 - Description/DescriptionToDatabase/DescriptionToDatabase.py", line 40, in <module> 
TestchipID = cursorOpenShark.fetchone()[0] # Fetch a single row using fetchone() method and store the result in a variable., the [0] fetches only 1 value 
TypeError: 'NoneType' object has no attribute '__getitem__' 

奇怪的是,有在數據庫中的值 - > testchipID ...

我的代碼:當你說

#get the testchipID and the testchipname 
testchipNr = sheet.cell(7, 0).value # Get the testchipnr 
print "testchipnr = ", testchipNr 
queryTestchipID = """SELECT testchipid FROM testchip WHERE nr = '%s'""" %(testchipNr) 
cursorOpenShark.execute(queryTestchipID) 
print "testchipID = ", cursorOpenShark.fetchone()[0] 
TestchipID = cursorOpenShark.fetchone()[0] # Fetch a single row using fetchone() method and store the result in a variable., the [0] fetches only 1 value 
+0

但testchipnr似乎是一個數字,你爲什麼把它放在你的查詢中的引號內? ''%s''?只要刪除引號,如果它的整數 - >'%s' – MYGz

+0

嗨,testchipnr不是一個整數。這是像TC104 – VeVi

回答

0

,它工作正常,但現在它不是,我能想到的唯一原因是當你的查詢返回零結果。

查看你的代碼,如果你的查詢只返回一個結果,那麼它將打印結果,並且當你下次打電話給cursorOpenShark.fetchone()存儲在TestchipID時它將返回無。

相反,你可以試試下面的代碼

#get the testchipID and the testchipname 
testchipNr = sheet.cell(7, 0).value # Get the testchipnr 
print "testchipnr = ", testchipNr 
queryTestchipID = """SELECT testchipid FROM testchip WHERE nr = '%s'""" %(testchipNr) 
cursorOpenShark.execute(queryTestchipID) 
TestchipID = cursorOpenShark.fetchone()[0] # Fetch a single row using fetchone() method and store the result in a variable., the [0] fetches only 1 value 
if TestchipID: 
    print "testchipID = ", TestchipID[0] 
else: 
    print "Returned nothing" 

讓我知道這是否正常工作。

+0

嗨,這沒有任何意義。我在代碼中放置了'print'testchipID =「,cursorOpenShark.fetchone()[0]'來顯示結果,表明它不是空的。現在我嘗試了你的代碼,並且突然它可以工作。所以我試過了原來的代碼(剛剛從今天早上覆製出來的代碼),它的工作原理。計算機啓動後到數據庫的鏈接是否需要時間,或者是什麼?我真的不認爲代碼中有問題,而不是數據庫連接?謝謝您的幫助!我會在明天看到它是否有效^^ – VeVi

+0

每個fetchone都會爲您提供光標中的下一個結果,因此您不應該像調整一樣進行兩次調用,因爲這實際上會從結果中跳過一條記錄。我無法評論數據庫的狀態,但如果程序無法建立連接,則在執行查詢時會出現錯誤。希望這可以幫助 –

+0

如果你的問題解決了,你可以關閉這個問題嗎? –