【问题标题】:sqlite3.connect() not working in python 3.3sqlite3.connect() 在 python 3.3 中不起作用
【发布时间】: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 文件。抱歉我的无知,我是初学者

标签: python sqlite


【解决方案1】:

Alex Barcelo 似乎解决了这个问题here

在 Ubuntu 上对我有用的几乎相同*:

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

在那之后,我不得不为我的 PyDev 项目重新配置 Python 解释器: 项目属性 -> PyDev-Interpreter/Grammar -> 单击此处配置未列出的解释器,然后删除,为您正在使用的 python 环境运行自动配置,然后点击“应用”。

*将“python2.7”替换为您正在使用sqlite3的python版本,如果“_sqlite3.x86_64-linux-gnu.so”不是您的linux系统文件的正确名称,您可以通常使用“locate _sqlite3”搜索它

【讨论】:

  • 如果你在附近。我有同样的问题,但在 virtualenv 中。我该如何解决这个问题?
  • @VictorHerasmePerez,对不起,真的不知道。我认为假设您具有 root 访问权限,我的解决方案会起作用,但我想您尝试过这个或没有 root 访问权限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 2016-04-16
相关资源
最近更新 更多