我对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操作系统上的sqlite版本。
然而,当我尝试
时sqlite3 test.db
bash: sqlite3: command not found
表示此计算机上未安装sqlite3。
然后我如何使用PRAGMA语句,如“PRAGMA encoding =”UTF-8“;”在python中创建数据库时?
答案 0 :(得分:4)
首先:
'3.7.7'应该是我的Ubuntu操作系统上的sqlite版本。
没有。它是Python构建的sqlite库的版本。
如果Python是针对静态库构建的,那么没有理由期望它与您系统上的任何其他内容相关联。即使它是针对共享库构建的,它也不会拥有与发行版的默认sqlite
包使用的共享库相同(尽管通常会这样)。
而且,即使Python 是针对你的发行版默认共享库的同一个共享库构建的:Ubuntu和许多发行版一样,允许你安装大多数libfoo.so
共享库而不安装foo
命令行工具。
特别是,如果您查看Ubuntu软件包(至少是最新版本),libsqlite3
软件包中有sqlite共享库,而python
和sqlite3
都依赖于在那个libsqlite3
包裹上。
因此,如果您需要sqlite3
命令行工具,则必须安装它;你没有通过安装Python自动获得它。
同时
有没有办法在python代码中使用PRAGMA encoding =“UTF-8”?
不确定。 PRAGMA
只是影响会话其余部分的SQL语句。无论是在命令行工具中执行它,还是在Python execute
命令中执行它,或者通过加载SQL脚本等都无关紧要。只需执行它。
但是,正如您在评论中指出的那样,根据the docs,除非您可以在连接到数据库之前运行,否则此特定编译指示将不起作用。因为DB-API 2.0(Python sqlite3
模块和大多数其他Python数据库模块都是为了构建的API)没有任何方法在未连接状态下执行语句,所以没有简单的方法来解决这个问题。
当然,您可以查看Python的各种备用(通常不是经过良好测试,速度较慢)的sqlite3实现,或者将the source分叉并修改为pysqlite
(定期的模块)作为sqlite3
)包含在stdlib中。
如果你想这样做,要查看的地方是connection.c
中的pysqlite_connection_init
功能。您可能不希望添加通用的预连接pragma支持,而是通过另一个参数控制编码到connect
的方法。请参阅sqlite3
的{{3}}文档,了解您可以在此处做些什么。 (然后你可能想提交一个bug并提交补丁。它不会进入Python 2.x,但是在pysqlite中被接受的任何内容最终都会以Python 3.x结束。)
但是,更容易实现您想要的方法正是您尝试做的事情:在Python之外创建数据库。只需以您喜欢的方式安装sqlite3
包(apt-get
,其中一个GUI包装器,无论如何)并使用它。
最后一件事:据我所知,根据您的版本,Python的模块将显式使用UTF-8,或使用默认编码,即UTF-8。所以,你不需要在这里做任何事情。