Julia 从 SQLite 查询

问题描述 投票:0回答:3

按照本教程 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)
。 知道我做错了什么吗?

julia
3个回答
3
投票

我不懂 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 的约定,函数全部小写,类型全部大写。


3
投票

要使用 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)

0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.