我对sqlite3和python 2.x之间的关系有些疑惑

这是输出:

$ python
Python 2.7.2+ (default, Jul 20 2012, 22:12:53) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.7.7'

“ 3.7.7”应该是我的Ubuntu OS上的sqlite版本。

但是,当我尝试

sqlite3 test.db 
bash: sqlite3: command not found

这意味着sqlite3没有安装在这台机器上。

然后,如何使用PRAGMA语句,例如“ PRAGMA encoding =“ UTF-8”;“ 在python中创建数据库时?

===============>>#1 票数:4 已采纳

第一:

“ 3.7.7”应该是我的Ubuntu OS上的sqlite版本。

不,这是构建Python所基于的sqlite库的版本。

如果Python是针对静态库构建的,则没有理由期望它以任何方式与系统上的其他任何内容相关。 即使它是针对共享库构建的,也不一定要与发行版的默认sqlite软件包所使用的共享库相同(尽管通常是这样)。

而且,即使Python 是基于发行版的默认共享库基于相同的共享库构建的:与许多发行版一样,Ubuntu允许您安装大多数libfoo.so共享库,而无需安装foo命令行工具。

特别是,如果您查看Ubuntu软件包(至少对于最新版本而言),则libsqlite3软件包中包含sqlite共享库,而pythonsqlite3依赖于该libsqlite3软件包。

因此,如果需要sqlite3命令行工具,则必须安装它。 您不会通过安装Python自动获得它。


与此同时:

有什么办法可以在Python代码中使用PRAGMA encoding =“ UTF-8”?

当然。 PRAGMA只是影响会话其余部分的一条SQL语句。 不管是在命令行工具中执行它,还是在Python execute命令中执行它,还是通过加载SQL脚本等来执行。都只需执行它即可。

但是,正如您在注释中指出的那样,根据docs ,除非您可以连接到数据库之前运行它否则这种特定的编译指示不会产生任何作用。 因为DB-API 2.0(Python sqlite3模块和大多数其他Python数据库模块都是基于该API的)没有任何方式可以在未连接状态下执行语句,所以没有简单的方法可以解决此问题。

当然,您可以查看用于Python的各种备用(通常未经过良好测试,并且运行速度较慢)的sqlite3实现,或者派生并将修改为pysqlite (该模块定期作为sqlite3包含在sqd3中)。

如果要执行此操作,则查找的地方是connection.cpysqlite_connection_init函数。 您可能不想添加通用的预连接编译指示支持,而是通过其他参数connect来控制编码的方法。 请参阅sqlite3open文档,以了解在这里可以做的有用的事情。 (然后,您可能要提交一个错误并提交一个补丁。它永远不会进入Python 2.x,但是在pysqlite中被接受的所有内容最终都会在Python 3.x中结束。)

但是,执行所需操作的更简单方法就是尝试执行的操作:在Python外部创建数据库。 只需以您喜欢的方式安装sqlite3软件包( apt-get ,其中一个GUI包装器,无论如何)并使用它即可。


最后一件事:据我所知,取决于您的版本,Python的模块将显式使用UTF-8,或使用默认编码,即UTF-8。 因此,您无需在此处做任何事情。

  ask by Gaby Solis translate from so

未解决问题?本站智能推荐: