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 & 説明 |
|---|---|
| 1 | sqlite3.connect(database [,timeout ,other optional arguments]) この API は、SQLite データベースファイル database へのリンクを開きます。":memory:" を使用すると、ディスク上ではなく RAM 内に database へのデータベース接続を開くことができます。データベースが正常に開かれると、接続オブジェクトが返されます。 データベースが複数の接続からアクセスされ、そのうちの 1 つがデータベースを変更すると、トランザクションがコミットされるまで SQLite データベースはロックされます。timeout パラメータは、接続がロックの解放を待機する時間を示し、その後例外が発生して接続が切断されます。timeout パラメータのデフォルトは 5.0(5 秒)です。 指定されたデータベース名 filename が存在しない場合、この呼び出しはデータベースを作成します。現在のディレクトリにデータベースを作成したくない場合は、パスを含むファイル名を指定することで、任意の場所にデータベースを作成できます。 |
| 2 | connection.cursor([cursorClass]) このルーチンはcursorPython データベースプログラミングで使用されます。このメソッドは、単一のオプションパラメータ cursorClass を受け入れます。このパラメータが指定された場合、それは sqlite3.Cursor から拡張されたカスタムカーソルクラスでなければなりません。 |
| 3 | cursor.execute(sql [, optional parameters]) このルーチンは SQL ステートメントを実行します。この SQL ステートメントはパラメータ化できます(つまり、SQL テキストの代わりにプレースホルダを使用します)。sqlite3 モジュールは 2 種類のプレースホルダをサポートしています:疑問符と名前付きプレースホルダ(名前付きスタイル)です。 例:cursor.execute("insert into people values (?, ?)", (who, age)) |
| 4 | connection.execute(sql [, optional parameters]) このルーチンは、前述のカーソル(cursor)オブジェクトが提供するメソッドのショートカットです。カーソル(cursor)メソッドを呼び出して中間カーソルオブジェクトを作成し、指定されたパラメータを指定してカーソルの execute メソッドを呼び出します。 |
| 5 | cursor.executemany(sql, seq_of_parameters) このルーチンは、seq_of_parameters 内のすべてのパラメータまたはマッピングに対して 1 つの SQL コマンドを実行します。 |
| 6 | connection.executemany(sql[, parameters]) このルーチンは、カーソル(cursor)メソッドを呼び出して作成された中間カーソルオブジェクトのショートカットであり、指定されたパラメータを指定してカーソルの executemany メソッドを呼び出します。 |
| 7 | cursor.executescript(sql_script) このルーチンは、スクリプトを受け取ると、複数の SQL ステートメントを実行します。最初に COMMIT ステートメントを実行し、次にパラメータとして渡された SQL スクリプトを実行します。すべての SQL ステートメントはセミコロンで;区切る必要があります。 |
| 8 | connection.executescript(sql_script) このルーチンは、カーソル(cursor)メソッドを呼び出して作成された中間カーソルオブジェクトのショートカットであり、指定されたパラメータを指定してカーソルの executescript メソッドを呼び出します。 |
| 9 | connection.total_changes() このルーチンは、データベース接続が開かれてから変更、挿入、または削除されたデータベースの総行数を返します。 |
| 10 | connection.commit() このメソッドは現在のトランザクションをコミットします。このメソッドを呼び出さない場合、最後に commit() を呼び出してから行ったすべての変更は、他のデータベース接続からは見えません。 |
| 11 | connection.rollback() このメソッドは、最後に commit() を呼び出してからデータベースに対して行われた変更をロールバックします。 |
| 12 | connection.close() このメソッドはデータベース接続を閉じます。これにより commit() が自動的に呼び出されないことに注意してください。以前に commit() メソッドを呼び出さずにデータベース接続を閉じた場合、行ったすべての変更が失われます! |
| 13 | cursor.fetchone() このメソッドは、クエリ結果セットの次の行を取得し、単一のシーケンスを返します。利用可能なデータがもうない場合は、None を返します。 |
| 14 | cursor.fetchmany([size=cursor.arraysize]) このメソッドは、クエリ結果セットの次の行グループを取得し、リストを返します。利用可能な行がもうない場合は、空のリストを返します。このメソッドは、size パラメータで指定されたできるだけ多くの行を取得しようとします。 |
| 15 | cursor.fetchall() このルーチンは、クエリ結果セット内のすべての(残りの)行を取得し、リストを返します。利用可能な行がない場合は、空のリストを返します。 |
データベースへの接続
次の 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 コードスニペットは、先ほど作成したデータベースにテーブルを作成するために使用されます:
例
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 テーブルにレコードを作成する方法を示しています:
例
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 数据操作成功その他の拡張