【发布时间】:2014-03-17 22:29:40
【问题描述】:
这可能很简单,但我不知道为什么我的脚本不起作用。我正在尝试与我的 sqlite3 数据库建立连接,但 eclipse 返回错误:“来自导入的未定义变量:连接”。我在 Linux 上的 virtualenv 中运行 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()
【问题讨论】:
-
通常,
connect是从_sqlite3导入并从sqlite3重新导出的函数之一。所以,我首先要尝试的是:import _sqlite3。如果可行,请致电help(_sqlite3)或dir(_sqlite3)看看它们是否正确。 -
另外,尝试导入其他 C 实现的模块。你可能会以某种方式最终得到一个带有 32 位 Python 但 64 位库的 venv,或者其他会破坏所有 C 模块的东西。
-
我认为 import sqlite3 是正确的,因为当我尝试 print(sqlite3.version_info) 时,它会正确返回版本。我还没有检查的库。
-
再看我的评论。
_sqlite3,带下划线,是一个C扩展模块。sqlite3,不带下划线,是一个封装了该扩展模块的纯 Python 模块。请尝试我建议的带有下划线的测试。为了测试其他 C 扩展模块……在 3.3 中,大部分都以与sqlite3相同的方式封装,但也有一些没有。我相信import audioop; print audioop.__file__应该显示 .so/.dll/.pyd 文件,而不是 .py 文件。 -
当我尝试做: import _sqlite3 它说是一个未解决的导入。这是否意味着库不正确?如您所说,audioop 返回一个非 .py 文件。抱歉我的无知,我是初学者