SQLite - Python

インストール

SQLite3 は sqlite3 モジュールを使用して Python と統合できます。sqlite3 モジュールは Gerhard Haring によって書かれました。これは、PEP 249 で説明されている DB-API 2.0 仕様と互換性のある SQL インターフェースを提供します。Python 2.5.x 以降にはこのモジュールがデフォルトで含まれているため、個別にインストールする必要はありません。

sqlite3 モジュールを使用するには、まずデータベースを表す接続オブジェクトを作成する必要があります。次に、必要に応じてカーソルオブジェクトを作成できます。これにより、すべての SQL ステートメントを実行できます。

Python sqlite3 モジュール API

以下は、Python プログラムで SQLite データベースを使用する際のニーズを満たす重要な sqlite3 モジュールプログラムです。詳細については、Python sqlite3 モジュールの公式ドキュメントを参照してください。

番号API & 説明
1sqlite3.connect(database [,timeout ,other optional arguments])

この API は、SQLite データベースファイル database へのリンクを開きます。":memory:" を使用すると、ディスク上ではなく RAM 内に database へのデータベース接続を開くことができます。データベースが正常に開かれると、接続オブジェクトが返されます。

データベースが複数の接続からアクセスされ、そのうちの 1 つがデータベースを変更すると、トランザクションがコミットされるまで SQLite データベースはロックされます。timeout パラメータは、接続がロックの解放を待機する時間を示し、その後例外が発生して接続が切断されます。timeout パラメータのデフォルトは 5.0(5 秒)です。

指定されたデータベース名 filename が存在しない場合、この呼び出しはデータベースを作成します。現在のディレクトリにデータベースを作成したくない場合は、パスを含むファイル名を指定することで、任意の場所にデータベースを作成できます。

2connection.cursor([cursorClass])

このルーチンはcursorPython データベースプログラミングで使用されます。このメソッドは、単一のオプションパラメータ cursorClass を受け入れます。このパラメータが指定された場合、それは sqlite3.Cursor から拡張されたカスタムカーソルクラスでなければなりません。

3cursor.execute(sql [, optional parameters])

このルーチンは SQL ステートメントを実行します。この SQL ステートメントはパラメータ化できます(つまり、SQL テキストの代わりにプレースホルダを使用します)。sqlite3 モジュールは 2 種類のプレースホルダをサポートしています:疑問符と名前付きプレースホルダ(名前付きスタイル)です。

例:cursor.execute("insert into people values (?, ?)", (who, age))

4connection.execute(sql [, optional parameters])

このルーチンは、前述のカーソル(cursor)オブジェクトが提供するメソッドのショートカットです。カーソル(cursor)メソッドを呼び出して中間カーソルオブジェクトを作成し、指定されたパラメータを指定してカーソルの execute メソッドを呼び出します。

5cursor.executemany(sql, seq_of_parameters)

このルーチンは、seq_of_parameters 内のすべてのパラメータまたはマッピングに対して 1 つの SQL コマンドを実行します。

6connection.executemany(sql[, parameters])

このルーチンは、カーソル(cursor)メソッドを呼び出して作成された中間カーソルオブジェクトのショートカットであり、指定されたパラメータを指定してカーソルの executemany メソッドを呼び出します。

7cursor.executescript(sql_script)

このルーチンは、スクリプトを受け取ると、複数の SQL ステートメントを実行します。最初に COMMIT ステートメントを実行し、次にパラメータとして渡された SQL スクリプトを実行します。すべての SQL ステートメントはセミコロンで;区切る必要があります。

8connection.executescript(sql_script)

このルーチンは、カーソル(cursor)メソッドを呼び出して作成された中間カーソルオブジェクトのショートカットであり、指定されたパラメータを指定してカーソルの executescript メソッドを呼び出します。

9connection.total_changes()

このルーチンは、データベース接続が開かれてから変更、挿入、または削除されたデータベースの総行数を返します。

10connection.commit()

このメソッドは現在のトランザクションをコミットします。このメソッドを呼び出さない場合、最後に commit() を呼び出してから行ったすべての変更は、他のデータベース接続からは見えません。

11connection.rollback()

このメソッドは、最後に commit() を呼び出してからデータベースに対して行われた変更をロールバックします。

12connection.close()

このメソッドはデータベース接続を閉じます。これにより commit() が自動的に呼び出されないことに注意してください。以前に commit() メソッドを呼び出さずにデータベース接続を閉じた場合、行ったすべての変更が失われます!

13cursor.fetchone()

このメソッドは、クエリ結果セットの次の行を取得し、単一のシーケンスを返します。利用可能なデータがもうない場合は、None を返します。

14cursor.fetchmany([size=cursor.arraysize])

このメソッドは、クエリ結果セットの次の行グループを取得し、リストを返します。利用可能な行がもうない場合は、空のリストを返します。このメソッドは、size パラメータで指定されたできるだけ多くの行を取得しようとします。

15cursor.fetchall()

このルーチンは、クエリ結果セット内のすべての(残りの)行を取得し、リストを返します。利用可能な行がない場合は、空のリストを返します。

データベースへの接続

次の Python コードは、既存のデータベースに接続する方法を示しています。データベースが存在しない場合は作成され、最終的にデータベースオブジェクトが返されます。

例

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')

print (データベースが正常に開かれました)

ここでは、データベース名を特定の名前に設定することもできます:memory:これにより、RAM 内にデータベースが作成されます。test.db必要に応じてパスを変更できます。上記のコードを sqlite.py ファイルに保存し、次に示すように実行します。データベースが正常に作成されると、次のようなメッセージが表示されます:

$chmod +x sqlite.py
$./sqlite.py
Open database successfully

テーブルの作成

次の Python コードスニペットは、先ほど作成したデータベースにテーブルを作成するために使用されます:

例

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print (データベースが正常に開かれました)
c = conn.cursor()
c.execute('''CREATE TABLE COMPANY
       (ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL);'''
)
print (データテーブルが正常に作成されました)
conn.commit()
conn.close()

上記のプログラムを実行すると、test.dbその中に COMPANY テーブルを作成し、次のようなメッセージを表示します:

データベースのオープンに成功しました
データテーブルの作成に成功しました

INSERT 操作

次の Python プログラムは、上で作成した COMPANY テーブルにレコードを作成する方法を示しています:

例

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
c = conn.cursor()
print (データベースが正常に開かれました)

c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (1, 'Paul', 32, 'California', 20000.00 )"
)

c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 )"
)

c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )"
)

c.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )"
)

conn.commit()
print (データの挿入が成功しました)
conn.close()

上記のプログラムを実行すると、COMPANY テーブルに指定されたレコードが作成され、次の 2 行が表示されます:

データベースが正常に開かれました データの挿入が成功しました

SELECT 操作

次の Python プログラムは、先ほど作成した COMPANY テーブルからレコードを取得して表示する方法を示しています:

#!/usr/bin/python

例

import sqlite3

conn = sqlite3.connect('test.db')
c = conn.cursor()
print (データベースが正常に開かれました)

cursor = c.execute("SELECT id, name, address, salary  from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print (データ操作が成功しました)
conn.close()

上記のプログラムを実行すると、次の結果が生成されます:

数据库打开成功
ID =  1
NAME =  Paul
ADDRESS =  California
SALARY =  20000.0

ID =  2
NAME =  Allen
ADDRESS =  Texas
SALARY =  15000.0

ID =  3
NAME =  Teddy
ADDRESS =  Norway
SALARY =  20000.0

ID =  4
NAME =  Mark
ADDRESS =  Rich-Mond
SALARY =  65000.0

数据操作成功

UPDATE 操作

次の Python コードは、UPDATE ステートメントを使用して任意のレコードを更新し、その後 COMPANY テーブルから更新されたレコードを取得して表示する方法を示しています:

例

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
c = conn.cursor()
print (データベースが正常に開かれました)

c.execute("UPDATE COMPANY set SALARY = 25000.00 where ID=1")
conn.commit()
print "Total number of rows updated :", conn.total_changes

cursor = conn.execute("SELECT id, name, address, salary  from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print (データ操作が成功しました)
conn.close()

上記のプログラムを実行すると、次の結果が生成されます:

数据库打开成功
Total number of rows updated : 1
ID =  1
NAME =  Paul
ADDRESS =  California
SALARY =  25000.0

ID =  2
NAME =  Allen
ADDRESS =  Texas
SALARY =  15000.0

ID =  3
NAME =  Teddy
ADDRESS =  Norway
SALARY =  20000.0

ID =  4
NAME =  Mark
ADDRESS =  Rich-Mond
SALARY =  65000.0

数据操作成功

DELETE 操作

次の Python コードは、DELETE ステートメントを使用して任意のレコードを削除し、その後 COMPANY テーブルから残りのレコードを取得して表示する方法を示しています:

例

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
c = conn.cursor()
print (データベースが正常に開かれました)

c.execute("DELETE from COMPANY where ID=2;")
conn.commit()
print "Total number of rows deleted :", conn.total_changes

cursor = conn.execute("SELECT id, name, address, salary  from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print (データ操作が成功しました)
conn.close()

上記のプログラムを実行すると、次の結果が生成されます:

数据库打开成功
Total number of rows deleted : 1
ID =  1
NAME =  Paul
ADDRESS =  California
SALARY =  20000.0

ID =  3
NAME =  Teddy
ADDRESS =  Norway
SALARY =  20000.0

ID =  4
NAME =  Mark
ADDRESS =  Rich-Mond
SALARY =  65000.0

数据操作成功
その他の拡張