Go sqlite3的一些driver

剛好在hacker news 上看到這一篇文章,看起來是個cgo free的Go Sqlite3 driver;讓我想起之前還真的因為升級Go的版本造成Go Sqlite3的一些runtime bug, 印象中最後的解法是透過把GNU GCC 改成MUSL GCC重新做cross compile 以後才解決,也因此看到這個資訊就蠻有興趣的。

不過從hacker news 的回應中看起來,效能上看起來會比原本常用的go-sqlite3 慢不少,如果在效能不是非常重要的情境下,看來也是可以考慮的方向。

References:

透過SQLite3 來用一指令實現SQL讀取CSV檔

看到DK的文章上提到這個功能覺得也太有趣了, 沒想到會有這麼簡單方式來從CSV檔中讀取想要的內容…

使用方式

將sqlite3 透過memory的方式讀取了以後, 就可以透過SQL來找到其中想要的內容了…

sqlite3 :memory: -cmd '.mode csv' -cmd '.import mds_content_status.csv temp' -cmd '.mode column' 'SELECT * FROM temp'

為了讓使用方式更方便, 還可以在.bashrc.zshrc中把上面的cli 指令包裝成 shell function 如下:

function query_csv() {
    local CSV_FILE=$1
    local TABLE=$2
    local QUERY=$3

    sqlite3 :memory: -cmd '.headers on' -cmd '.mode csv' -cmd ".import ${CSV_FILE} ${TABLE}" -cmd '.mode column' "${QUERY}"
}

然後我們就可以用下面的方式去query了…

query_csv users.csv user_table 'SELECT id, name FROM user_table where id=17807'

reference