SQLiteとは
SQLite は、リレーショナルデータベース管理システム (RDBMS) の一種です。他には MySQL、PostgreSQL、Oracle Database などがあります。SQLite は、サーバーが必要ない軽量な RDBMS で、またオープンソースであるため、多くのプラットフォームで利用することができます。SQLite では、SQL という標準化されたデータベース言語を使用して、データベースを操作することができます。
SQLiteの使用例
SQLite3 は、SQL データベースのマネージメントシステムです。Julia で SQLite3 を使用するには、まず SQLite.jl という Julia パッケージをインストールする必要があります。次に、以下のようにして SQLite3 データベースを操作できます。
using SQLite
# データベースに接続する
db = SQLite.DB("mydatabase.db")
# # テーブルを作成する
SQLite.execute(db, "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)")
# # データを挿入する
SQLite.execute(db, "INSERT INTO users (id, name) VALUES (1, 'Alice')")
SQLite.execute(db, "INSERT INTO users (id, name) VALUES (2, 'Bob')")
# # 以下はデータを取得できない
results = SQLite.execute(db, "SELECT * FROM users")
# # 100が返される
for result in results
println(result) #100
end
# # データを取得する
db = SQLite.DB("mydatabase.db")
query = "SELECT * FROM users"
results = DBInterface.execute(db, query)
# # 結果を表示する
for result in results
println(result)
end
#=
SQLite.Row:
:id 1
:name "Alice"
SQLite.Row:
:id 2
:name "Bob"
=#
# データベースの接続を終了する
SQLite.close(db)
上記のコードは、名前が Alice と Bob の 2 人のユーザーを含む users テーブルを作成し、それらをデータベースから取得する例です。
結果はイテレーター
上記のresultsはイテレーターです。
results = SQLite.query(db, "SELECT * FROM users")
結果は番号で取り出せる
# データを取得する
db = SQLite.DB("mydatabase.db")
query = "SELECT * FROM users"
results = DBInterface.execute(db, query)
# # 結果を表示する
for result in results
println("#",result[1],":",result[2])
end
SQLite.close(db)
#=
#1:Alice
#2:Bob
=#
アトリビュートでも取り出せる
# データを取得する
db = SQLite.DB("mydatabase.db")
query = "SELECT * FROM users"
results = DBInterface.execute(db, query)
# # 結果を表示する
for result in results
println("#",result.id,":",result.name) #result["id"]はエラー
end
SQLite.close(db)
#=
#1:Alice
#2:Bob
=#
closeするタイミング
当然ですがイテレーターなので元となっているDBを閉じられるとエラーになります。
# データを取得する
db = SQLite.DB("mydatabase.db")
query = "SELECT * FROM users"
results = DBInterface.execute(db, query)
# # ここで閉じてしまうと。。。
SQLite.close(db)
# # 結果を表示するつもりが。。
for result in results
println("#",result.id,":",result.name)
end
# SQLiteException("Statement 1 not found")
DataFrameでデータを受け取る
以下は結果を|> DataFrameでDataFrameに変換して受け取るとシンプルです。
using DataFrames
# データを取得する
db = SQLite.DB("mydatabase.db")
query = "SELECT * FROM users"
results_df = DBInterface.execute(db, query) |> DataFrame
# # 結果を表示する
println(results_df)
#終了する
SQLite.close(db)