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のサイトを参照。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | # 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インジェクションのリスクをつくることになるので使わない。代わりに上記サンプルにあるようにプレースホルダ(?)を使う。
1 2 | dt = '2016-05-21' cur.execute( "SELECT * FROM test WHERE date = '%s'" % dt) |
実行結果
上記のサンプル(sample.py)を実行すると以下の結果が出力される。
コマンドラインからテーブルの内容を確認してみる。
0 件のコメント:
コメントを投稿