ラズパイにSQLiteをインストール pythonからアクセスしてみた
買ったは良いが、色々忙しくて、ほったらかしの「ラズパイ」である。
本日は、ラズパイにSQLiteを導入してみようという話題である。
普通に、raspbianをインストールしただけなら、SQLiteは入っていない。
まずは、パッケージとしてSQLiteが存在しているかどうかを検索してみる。
yumならyum searchとしてリポジトリにあるかを検索できるのだが、apt-getにはsearchコマンドがないので、apt-cacheで検索することになる。
apt-getにあまり慣れていないので、apt-get search sqlite3とかやってエラーになり、apt-getでのパッケージの検索ってどうやってやるんだっけ?と毎回調べているような気がする。
検索するときは、apt-cacheでやる。
root@raspberrypi:/home/pi# apt-cache search sqlite3 akonadi-backend-sqlite - SQLite storage backend for Akonadi aolserver4-nssqlite3 - AOLserver 4 module: module for accessing SQLite 3 databases bacula-common-sqlite3 - network backup service - SQLite v3 common files 以下略
sqlite3で検索しているので、なんか沢山出てきた。
sqlite3 - Command line interface for SQLite 3
これだけ入れとけばOKか。
apt-getでインストールしてみる(sudo suでroot権限取ってからやってます)。
root@raspberrypi:/home/pi# apt-get install sqlite3 パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下の追加パッケージがインストールされます: libsqlite3-0 提案パッケージ: sqlite3-doc 以下のパッケージが新たにインストールされます: sqlite3 以下のパッケージはアップグレードされます: libsqlite3-0 アップグレード: 1 個、新規インストール: 1 個、削除: 0 個、保留: 134 個。 1,203 kB のアーカイブを取得する必要があります。 この操作後に追加で 1,991 kB のディスク容量が消費されます。 続行しますか? [Y/n] y 取得:1 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian stretch/main armhf libsqlite3-0 armhf 3.16.2-5+deb9u1 [493 kB] 取得:2 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian stretch/main armhf sqlite3 armhf 3.16.2-5+deb9u1 [709 kB] 1,203 kB を 2秒 で取得しました (486 kB/s) changelog を読んでいます... 完了 (データベースを読み込んでいます ... 現在 129121 個のファイルとディレクトリがインストールされています。) .../libsqlite3-0_3.16.2-5+deb9u1_armhf.deb を展開する準備をしています ... libsqlite3-0:armhf (3.16.2-5+deb9u1) で (3.16.2-5 に) 上書き展開しています ... libsqlite3-0:armhf (3.16.2-5+deb9u1) を設定しています ... 以前に未選択のパッケージ sqlite3 を選択しています。 (データベースを読み込んでいます ... 現在 129121 個のファイルとディレクトリがインストールされています。) .../sqlite3_3.16.2-5+deb9u1_armhf.deb を展開する準備をしています ... sqlite3 (3.16.2-5+deb9u1) を展開しています... sqlite3 (3.16.2-5+deb9u1) を設定しています ... libc-bin (2.24-11+deb9u1) のトリガを処理しています ... man-db (2.7.6.1-2) のトリガを処理しています ...
無事にインストールできた。
manのインデックスを作るのに時間がかかる感じ。数分でインストールが終了した。
sqlite3コマンドで動作確認してみる。
root@raspberrypi:/home/pi# sqlite3 test.db SQLite version 3.16.2 2017-01-06 16:32:41 Enter ".help" for usage hints. sqlite> create table foo (a integer,b text); sqlite> insert into foo values(1,'test'); sqlite> select * from foo; 1|test sqlite>
よし、動いている(rootでやることなかったかも)。
ラズパイといえば、Pythonだよな。ということで、pythonからsqlite3を使ってみる。
import sqlite3
でsqlite3モジュールをインポートして、
con = sqlite3.connect('/home/pi/test.db')
で接続を作って、
cur = con.cursor()
で、カーソルを作って、
cur.execute('SELECT * FROM foo')
で、カーソルのexecuteメソッドでSQL命令を実行できるらしい。
カーソルから実行結果を得るには、以下のように
for row in cur: print(row[0], row[1])
for文を回せばOKらしい。
最後に、con.close()で接続を切っておしまい。
以下は、作成したpythonスクリプトである。
import sqlite3 con = sqlite3.connect('/home/pi/test.db') cur = con.cursor() cur.execute('SELECT * FROM foo') for row in cur: print(row[0], row[1]) con.close()
しかし、ここに大きな落とし穴が。
完成したので、実行すると、エラーが。
pi@raspberrypi:~ $ python sqlite3.py Traceback (most recent call last): File "sqlite3.py", line 1, inimport sqlite3 File "/home/pi/sqlite3.py", line 3, in con = sqlite3.connect('/home/pi/test.db') AttributeError: 'module' object has no attribute 'connect'
sqlite3やconnectの綴間違えてないよなぁ。
sqlite3は標準モジュールに入っているから別途インストールする必要なしって書いてあるし。
「AttributeError: 'module' object has no attribute 'connect'」
で検索してみたら、謎が解けた。
スクリプトのファイル名がまずかったようである。
sqlite3.py -> testsqlite3.py
sqlite3モジュールをインポートして使いたい場合は、ファイル名にsqlite3は使っちゃダメ、ということらしい。
実行したら、ちゃんとSELECT命令が実行できた。
pi@raspberrypi:~ $ python testsqlite3.py (1, u'test')

Raspberry Pi3 Model B ボード&ケースセット 3ple Decker対応 (Element14版, Clear)-Physical Computing Lab
- 出版社/メーカー: TechShare
- メディア: エレクトロニクス
関連記事
SQLポケットリファレンスの歴史
SQLポケットリファレンスの歴史その2
第4版には電子版もあります。
SQLポケットリファレンスが第4版になりました
改訂第4版 SQLポケットリファレンス電子版
投稿者プロフィール

最新の投稿
コンピューター関係の記事2025年4月26日アイキャッチ画像にSQLアイコンとJSONアイコンが欲しい
コンピューター関係の記事2025年4月23日AdSense審査に無事パス
コンピューター関係の記事2025年4月22日SSブログ復活
コンピューター関係の記事2025年4月22日SSブログが無くなった余波は大きい