2016-09-23 74 views
-1

我在Python新手Python腳本上cursor.execute掛起()

我調試現有腳本是如下,

print "Table name: %s " %table_name_r 
print "Between: %s " % between 

cursor = db.cursor() 
print "Total Rows: %s " % cursor.rowcount 

cursor.execute("""select contactid,li_url_clean,li_company,complink from """+ table_name_r +""" where li_company is not null and id_auto between """+between) 

print "Execution complete" 

我發現了以下輸出,

Table name: li_records 
Between: 4 and 6 
Total Rows: -1 

我這裏有2個問題,

1)(已解決)我的表li_records有91行,爲什麼我得到的行數爲-1?

2.)爲什麼我的腳本掛在cursor.execute

問題1解決:許多人一樣,你指出我得到的理由「-1」,是因爲我還沒有執行的查詢尚未

任何幫助表示讚賞。 在此先感謝。

+1

您需要在cursor.execute() –

+0

@picmate後調用cursor.rowcount謝謝,這回答我的第一個問題,但即使在我這樣做後,我的腳本仍然掛起。 –

+1

我相信db是一個連接對象,對嗎? –

回答

1

您尚未執行查詢,因此數據庫不知道結果中的行數。另見the docs on rowcount

它指出:

根據需要由Python DB API規格,行數屬性「是-1的情況下,沒有 executeXX()已經在執行光標[..]

至於爲什麼你的execute方法掛起,我不知道。你可以構造查詢字符串的方法調用之外,像這樣:

query = "select contactid,li_url_clean,li_company,complink from " + table_name_r + " where li_company is not null and id_auto between " + between 
cursor.execute(query) 

如果你那樣做,你也可以print執行之前。這樣您可以更輕鬆地檢查查詢是否有任何問題。

+0

謝謝Jasper,我理解了我的第一個問題。就像你建議我在執行它之前打印出查詢一樣,它就像我期望的那樣。 –

+1

嗯,並複製打印的查詢,並通過sqlite直接執行它給你預期的結果? – Jasper

+0

我沒有使用sqlite,而是一種名爲'Emma'的替代方案,我的查詢都不在該應用程序上運行,即使是一個簡單的'select * from tablename',因爲它崩潰了。你認爲這可能是原因嗎? –