Raspberry PiのPython3で、データベースとしてSQliteを使うことにした。Linuxでデータベースといえば、MySQLやPostgreSQLがよくあげられるが、データベースにアクセスするのはRaspberry Pi上で動かすPythonのみで、データ量もたいしたものではない。機能は基本的なもので十分で、動作が軽く、簡単に管理できるデータベースが望ましい。というわけでSQliteを選択した。
SQiteは、アプリに組み込んで使用できるデータベースで、機能的にはMySQLやPostgreSQLには劣るものの、サーバータイプのMySQLやPostgreSQLに比べて軽量で管理が簡単。
Python3で使用するにはインストールは不要。SQliteのライブラリがデフォルトである。ただ、コマンドラインでもデータベースを操作できるようにするため、今回はSQliteをインストールする。
最新バージョンのSQlite3をインストール。コマンドは以下の通り。
コマンドラインからデータベースを開くときは、sqlite3に続けてデータベースのファイル名を指定する。ファイルがなければ新規作成される。
sqlite>に続けてSQLを入力して実行する。終了するときは.exit(はじめにピリオドが必要)。
以下はテーブル作成してデータをインサートし、テーブルからデータを取得するサンプルコード。SQliteのデータ型についてはSQliteのサイトを参照。
ここで注意することは、SQL文をつくるときに以下のようにするとSQLインジェクションのリスクをつくることになるので使わない。代わりに上記サンプルにあるようにプレースホルダ(?)を使う。
上記のサンプル(sample.py)を実行すると以下の結果が出力される。
コマンドラインからテーブルの内容を確認してみる。
SQiteは、アプリに組み込んで使用できるデータベースで、機能的にはMySQLやPostgreSQLには劣るものの、サーバータイプのMySQLやPostgreSQLに比べて軽量で管理が簡単。
Python3で使用するにはインストールは不要。SQliteのライブラリがデフォルトである。ただ、コマンドラインでもデータベースを操作できるようにするため、今回はSQliteをインストールする。
SQliteのインストールとコマンドラインからの操作
最新バージョンのSQlite3をインストール。コマンドは以下の通り。
コマンドラインからデータベースを開くときは、sqlite3に続けてデータベースのファイル名を指定する。ファイルがなければ新規作成される。
sqlite>に続けてSQLを入力して実行する。終了するときは.exit(はじめにピリオドが必要)。
PythonからのSQliteの操作
以下はテーブル作成してデータをインサートし、テーブルからデータを取得するサンプルコード。SQliteのデータ型についてはSQliteのサイトを参照。
# sqlite3ライブラリインポート import sqlite3 # データベースファイル(test.db)を開く(ファイルがないときは新しいファイルを作成する) con = sqlite3.connect( "test.db" ) # select文でフェッチしたデータをカラム名で取得できるようにする con.row_factory = sqlite3.Row; # cursorインスタンス作成 cur = con.cursor() # テーブル作成SQLの実行 cur.execute( "create table test (date text, id integer, temp float )" ); data = [('2016-04-01', 1, 44.6 ), ('2016-05-21', 333, -7.0 ), ('2016-06-30', 77777, 99.9 ), ] # SQLを複数まとめて実行するときはexecutemanyを使う # 変数でSQL文を作成するときはプレースホルダ(?)を使う cur.executemany( "insert into test values (?,?,?)", data ) # commit con.commit(); dt = ('2016-05-21',) # select文の実行 cur.execute( "select * from test where date=?;", dt ) # select文でフェッチしたデータの表示 for row in cur: print( row['date'], row['id'], row['temp'] ); con.close()
ここで注意することは、SQL文をつくるときに以下のようにするとSQLインジェクションのリスクをつくることになるので使わない。代わりに上記サンプルにあるようにプレースホルダ(?)を使う。
dt = '2016-05-21' cur.execute("SELECT * FROM test WHERE date = '%s'" % dt)
実行結果
上記のサンプル(sample.py)を実行すると以下の結果が出力される。
コマンドラインからテーブルの内容を確認してみる。
0 件のコメント:
コメントを投稿