按照本教程 https://www.youtube.com/watch?app=desktop&v=qUrtLJcehE0,我创建了一个名为 Movies 的数据库。在数据库中创建了一个名为“电影”的表,接下来还添加了一个条目,
using SQLite
db = SQLite.DB("Movies")
SQLite.execute(db,"CREATE TABLE IF NOT EXISTS movies(movie_id REAL,movie_name TEXT, location TEXT)")
SQLite.execute(db,"INSERT INTO movies (movie_id,movie_name,location) VALUES(1,'Avengers','USA')")
但是现在当我尝试按如下方式查询条目时,
SQLite.Query(db, "SELECT * from movies")
我收到此错误,
Error: MethodError: no method matching SQLite.Query.(::SQLite.DB,::String)
。
知道我做错了什么吗?
我不懂 SQL,但我认为你想再次使用
SQLite.execute
而不是 SQLite.Query
。 SQLite.Query
是struct
而不是function
,并且它没有任何文档。我不认为你应该在外部调用它。更多文档位于此处。
方法错误意味着您正在使用错误的参数调用某些内容。
SQLite.Query
struct
需要以下所有参数:
struct Query
stmt::Stmt
status::Base.RefValue{Cint}
names::Vector{Symbol}
types::Vector{Type}
lookup::Dict{Symbol, Int}
end
SQLite.execute
function
期望参数采用以下形式之一:
SQLite.execute(db::SQLite.DB, sql, [params])
SQLite.execute(stmt::SQLite.Stmt, [params])
按照 Julia 的约定,函数全部小写,类型全部大写。
要使用 SQLite 包加载表,
using SQLite
using DataFrames
# Make a connection
db = SQLite.DB("Movies")
# To find out all tables available in schema
tbls = SQLite.tables(db)
# To load a specific table (movies table from Movies.db)
q = "SELECT * FROM movies"
data = SQLite.DBInterface.execute(db,q)
# To get as a dataframe
df = DataFrames.DataFrame(data)
execute
函数在DBInterface
中定义。可能不明显,但以下有效:
begin
using SQLite;
using DBInterface:execute;
using TypedTables, DataFrames
db = SQLite.DB()
( (id = i, name="Row number $i", v= rand() ) for i in 1:1000 ) |>
Table |>
SQLite.load!(db, "test")
execute(db, "select * from test") |> Table
end