LoginSignup
0
1

More than 1 year has passed since last update.

Juliaで学ぶプログラミング入門 IO/データベース/SQLite3 その1

Last updated at Posted at 2022-12-19

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)

参考図書

1から始めるプログラミング

Juliaプログラミングクックブック

天才プログラマー タンメイが教える Julia超入門

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1