第一的:
'3.7.7' 应该是我的 Ubuntu 操作系统上的 sqlite 版本。
不,这是构建 Python 的 sqlite 库的版本。
如果 Python 是针对静态库构建的,则没有理由期望它以任何方式与系统上的其他任何东西相关联。即使它是针对共享库构建的,它也不必与发行版的默认sqlite
包使用的共享库相同(尽管通常是这样)。
而且,即使 Python是针对作为发行版默认共享库的相同共享库构建的:Ubuntu 与许多发行版一样,允许您在不安装命令行工具libfoo.so
的情况下安装大多数共享库。foo
特别是,如果您查看 Ubuntu 软件包(至少对于最近的版本),软件包中有 sqlite 共享库libsqlite3
,并且两者都python
依赖sqlite3
于该libsqlite3
软件包。
所以,如果你想要sqlite3
命令行工具,你必须安装它;您不会通过安装 Python 自动获得它。
同时:
有没有办法在 python 代码中使用 PRAGMA encoding = "UTF-8" ?
当然。APRAGMA
只是影响会话其余部分的 SQL 语句。无论您是在命令行工具中执行它,还是在 Pythonexecute
命令中,或者通过加载 SQL 脚本等方式执行它都没有关系。只需执行它。
但是,正如您在评论中指出的那样,根据文档,除非您可以在连接到数据库之前运行它,否则这个特定的编译指示不会产生任何影响。因为 DB-API 2.0(Pythonsqlite3
模块和大多数其他 Python 数据库模块都构建到的 API)没有任何方式在未连接状态下执行语句,所以没有简单的方法解决这个问题。
当然,您可以查看 Python 的各种替代(通常没有经过很好的测试,而且速度较慢)sqlite3 实现,或者 fork 并将源代码修改为pysqlite
(定期包含在 stdlib 中的模块sqlite3
)。
如果你想这样做,要看的地方pysqlite_connection_init
是connection.c
. 您可能不想添加通用的 pre-connect pragma 支持,而是通过另一个参数来控制编码的方法connect
。请参阅open
文档sqlite3
以了解您可以在此处进行哪些有用的操作。(然后你可能想提交一个错误并提交一个补丁。它永远不会进入 Python 2.x,但任何在 pysqlite 中被接受的东西最终都会在 Python 3.x 中结束。)
但是做你想做的更简单的方法正是你想要做的:在 Python 之外创建数据库。只需sqlite3
以您最喜欢的方式安装软件包(apt-get
GUI 包装器之一,等等)并使用它。
最后一件事:据我所知,根据您的版本,Python 的模块将明确使用 UTF-8,或者使用默认编码,即 UTF-8。所以,你不需要在这里做任何事情。