2013-06-18 64 views
1

這可能是一件很容易的事情,但我無法弄清楚爲什麼我的腳本無法工作。我試圖與我的sqlite3數據庫連接,但eclipse返回錯誤:「未定義變量從導入:連接」。我在linux上使用virtualenv運行python 3.3。謝謝你的幫助!sqlite3.connect()不工作在python 3.3

from urllib.request import urlopen 
import datetime 
import sqlite3 

class Crawler(): 

    def storeContent(self, html, url): 
     conn = sqlite3.connect('database.db') 
     c = conn.cursor() 
     c.execute("INSERT .. ", [item, item]) 
     c.commit() 
     c.close() 
+0

通常,'connect'是從'_sqlite3'導入並從'sqlite3'重新導出的函數之一。所以,我會嘗試的第一件事是:'import _sqlite3'。如果可行,請調用'help(_sqlite3)'或'dir(_sqlite3)'並查看它們是否正確。 – abarnert

+0

另外,請嘗試導入其他C實現的模塊。你可能以某種方式結束了32位Python但是64位lib的venv,或者其他會打破所有C模塊的東西。 – abarnert

+0

我認爲import sqlite3是正確的,因爲當我嘗試打印(sqlite3.version_info)它正確返回版本。我還沒有檢查的庫。 – Jab

回答

1

看起來像Alex Barcelo解決了這個問題here

什麼工作,我在Ubuntu上得差不多了*:

cd /usr/lib/python2.7/lib-dynload/ 
sudo ln -s _sqlite3.x86_64-linux-gnu.so _sqlite3.so 

在那之後,我不得不重新配置Python解釋器爲我的PyDev項目: 項目屬性 - > PyDev的解釋器/語法 - >點擊此處配置未列出的解釋器,然後刪除,爲您正在使用的python環境運行自動配置,然後點擊「應用」。

*將「python2.7」替換爲您正在使用sqlite3的python版本,並且如果「_sqlite3.x86_64-linux-gnu.so」不是您的Linux系統文件的正確名稱,那麼您通常可以使用「locate _sqlite3」來搜索它。

+0

如果你在附近。我有同樣的問題,但在virtualenv。我該如何解決這個問題? –

+0

@VictorHerasmePerez,對不起,真的不知道。我認爲我的解決方案可以工作,假設你有root權限,但是我想你是ether試過的,或者沒有root權限。 –

+0

我終於解決了。非常感謝。 –