我已经在 Centos 7.4 机器上安装了 Python 3.6,并且需要 SQLite 的更新版本(我正在使用一些新功能)。它附带的 SQLite 版本非常旧:3.7.17。
这是怎么做到的?在 Windows 上,将 Python\DLLs 目录中的 sqlite.dll 文件替换为所需的文件很简单,但我没有找到如何在 Linux 上执行此操作的信息。
我可以看到这个问题之前有人问过,但没有回答 - /sf/ask/2734513071/ - 这是我唯一的页面谷歌搜索;大多数其他结果是 Python 2/pysqlite,这对我没有帮助。
那么,如何在 CentOS 机器上更新 Python 使用的 SQLite 版本呢?
您将如何修改函数csv_to_sqlite以便sqlite3命令.import直接从标准输入而不是从临时命名管道读取?
#!/bin/bash
function csv_to_sqlite() {
local database_file_name="$1"
local table_name="$2"
local temp_input_fifo=$(mktemp -u)
mkfifo $temp_input_fifo
sqlite3 -csv $database_file_name ".import $temp_input_fifo $table_name" &
cat > $temp_input_fifo
rm $temp_input_fifo
}
database_file_name=$1
table_name=$2
csv_to_sqlite "$database_file_name" "$table_name"
Run Code Online (Sandbox Code Playgroud)
$ printf "col1,col2,col3\na,1,2.6\nb,2,5.4\n" | ./csv_to_sqlite test.sqlite test
$ sqlite3 -csv -header test.sqlite "SELECT * FROM test"
col1,col2,col3
a,1,2.6
b,2,5.4
Run Code Online (Sandbox Code Playgroud) 其命令行客户端的SQLite 文档表明它可以通过 UNIX 实用程序过滤 SQLite 查询的输出:
默认输出模式是“列表”。
[...]
当您要将查询的输出发送到另一个程序(例如 AWK)以进行额外处理时,列表模式特别有用。
在 SQLite 命令提示符下生成的输出示例
sqlite> select * from todos;
1|finish reading getting started section of the vim manual
2|finish app feature
Run Code Online (Sandbox Code Playgroud)
然后,如果我尝试向命令添加管道,我只会得到一个新提示
sqlite> select * from todos; | grep vim
...>
Run Code Online (Sandbox Code Playgroud)
是否可以使用来自 SQLite 命令行的管道将输出发送到 unix 实用程序,或者是否只能在您实际编写 C 应用程序并使用 SQLite C 库时过滤 SQLite 输出?
sqlite3将命令历史存储在 中.sqlite_history,默认情况下创建于:
$HOME/.sqlite_history
Run Code Online (Sandbox Code Playgroud)
如何将此位置更改为其他位置?
这是可能的,例如mysql,我可以在其中定义环境变量
MYSQL_HISTFILE=/path/to/whatever/file
Run Code Online (Sandbox Code Playgroud)
但是我找不到任何相应的环境变量 sqlite3
export SQLITE_HISTFILE=/tmp/history
Run Code Online (Sandbox Code Playgroud)
没有效果。我发现了一个帖子,其中有人问同样的问题,但没有有用的答案中给出。
我想编写一个shell脚本,首先打开sqlite,然后复制一个表,最后删除该表的内容。我怎样才能在 shell 脚本中做到这一点?
>>cd /var/www/dbs
>>sqlite3 ha.db
sqlite>>.timeout 2000
sqlite>>INSERT INTO table1 SELECT * FROM table2;
sqlite>>DELETE * FROM table2;
sqlite>>.quit
Run Code Online (Sandbox Code Playgroud)
这部分怎么写呢?
>>sqlite3 ha.db
sqlite>>INSERT INTO table1 ('a1','a2') VALUES ('1','2');
sqlite>>.quit
Run Code Online (Sandbox Code Playgroud) 我需要能够通过命令行一步完成此操作:
lab-1:/etc/scripts# sqlite3 test.db
SQLite version 3.8.10.2 2015-05-20 18:17:19
Enter ".help" for usage hints.
sqlite> .mode csv ;
sqlite> .import /tmp/test.csv users
sqlite> select * from users;
John,Doe,au,0,"",1,5555,91647fs59222,audio
sqlite> .quit
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
lab-1:/etc/scripts# sqlite3 test.db ".mode csv ; .import /tmp/deleteme.csv users"
Run Code Online (Sandbox Code Playgroud)
和
lab-1:/etc/scripts# sqlite3 test.db ".mode csv .import /tmp/deleteme.csv users"
Run Code Online (Sandbox Code Playgroud)
我没有收到错误,但我也没有在用户表中得到任何数据。
任何提示将不胜感激。