2016-12-07 4 views
0

私には奇妙な問題があります。私はexcelでvbaコードを作成しました。これはExcelシートから情報を取得してデータベースに格納するPythonコードを呼び出します。昨日は問題ありませんでした。今日私は自分のコンピュータを起動し、vbaコードを試してみたところ、pythonファイルにエラーがありました。python Msqlとfetchoneとの接続にエラーが発生しました

エラー:

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

あなたが言っているとおりそれはうまくいきましたが、今はそうではありません。私が考えることができる唯一の理由は、あなたのクエリがゼロの結果を返すときです。

コードを見ると、1つの結果しか返されない場合は結果が表示され、次にcursorOpenShark.fetchone()に電話をかけてTestchipIDに格納すると、Noneが返されます。

代わりに、あなたはこれが動作するかどうか、私に教えてください、次のコード

#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] 'をコードに入れて、空ではないことを表示します。今あなたのコードを試して、突然それが動作します。だから私は元のコードを(ちょうど今朝からそれをコピーして)試して、それは動作します。コンピュータの起動後にデータベースへのリンクに時間がかかることはありますか?私は本当にdatabaseconnectionではなく、コードに問題があるとは思わない?助けてくれてありがとう!私はそれが明日の午前中に働くかどうか分かります^^ – VeVi

+0

すべてのフェッチンは次の結果をカーソルに与えます。その結果、あなたは本質的に結果からレコードをスキップするように2回コールするべきではありません。データベースの状態についてはコメントできませんが、プログラムが接続できない場合は、クエリを実行するとエラーが発生します。希望があれば –

+0

あなたの問題が解決したら、この質問を閉じることができますか? –

関連する問題