如何在Julia中以只读方式打开SQLite数据库?

rkttyhzu  于 2022-12-13  发布在  SQLite
关注(0)|答案(2)|浏览(133)

我想从Julia脚本(Mac OS X)读取Safari历史数据库。
我有一个命令行脚本,工作:

sqlite3 -readonly ~/Library/Safari/History.db 'SELECT v.title, i.url FROM history_items i, history_visits v WHERE i.url LIKE "%en.wikipedia.org%" AND i.id=v.history_item AND v.title LIKE "%- Wikipedia%" GROUP BY v.title ORDER BY v.visit_time'

...但在Julia(Juno / Atom)中尝试时出现权限错误

db = SQLite.DB("/Users/grimxn/Library/Safari/History.db")
sql = """
    SELECT v.title, i.url, v.visit_time
    FROM history_items i, history_visits v
    WHERE i.url LIKE "%en.wikipedia.org%"
        AND i.id=v.history_item
        AND v.title LIKE "%- Wikipedia%"
    GROUP BY v.title
    ORDER BY v.visit_time
"""
result = DBInterface.execute(db, sql) |> DataFrame
(rows, cols) = size(result)
println("Result has $(rows) rows")
println("Earliest: $(result[1,1])")
println("Latest: $(result[rows,1])")

错误:加载错误:SQLite.SQLiteException(“无法打开数据库文件”)
现在,当我将数据库复制到我的主目录,并交换

db = SQLite.DB("/Users/grimxn/Library/Safari/History.db")

db = SQLite.DB("/Users/grimxn/History.db")

一切正常,所以我 * 猜 * 是Julia / Juno进程只获得了读权限,但正在访问数据库读/写。
如何在Julia中以只读方式附加到数据库?

p4rjhz4m

p4rjhz4m1#

Jaen的答案是正确的,并且正确地预测了mode=ro标志将被支持。It is now supported,因此下面的代码将起作用(并且到今天为止也起作用):

julia> using SQLite

julia> db = SQLite.DB("file:/path/to/db.sqlite?mode=ro")
SQLite.DB("file:/path/to/db.sqlite?mode=ro")
ia2d9nvy

ia2d9nvy2#

理论上,使用URI连接字符串:file:foo.db?mode=ro .
这记录在in the SQLite manual中。
实际上,当前版本的SQLite.jl包似乎不支持URI,也不支持可以传递到sqlite3_open_v2()的标志。
留下这个答案作为参考,以防Julia软件包有一天修复了这个问题。

相关问题