我想从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中以只读方式附加到数据库?
2条答案
按热度按时间p4rjhz4m1#
Jaen的答案是正确的,并且正确地预测了
mode=ro
标志将被支持。It is now supported,因此下面的代码将起作用(并且到今天为止也起作用):ia2d9nvy2#
理论上,使用URI连接字符串:
file:foo.db?mode=ro
.这记录在in the SQLite manual中。
实际上,当前版本的SQLite.jl包似乎不支持URI,也不支持可以传递到
sqlite3_open_v2()
的标志。留下这个答案作为参考,以防Julia软件包有一天修复了这个问题。