このPython SQLiteチュートリアルの目的は、SQLiteデータベースを使用してPythonデータベースアプリケーションを開発す PythonからSQLiteデータベース操作を実行する方法を学びます。
ご存知のように、SQLiteは比較的迅速で、サーバーレスで、自己完結型で、信頼性の高いSQLデータベースエンジンを実装するC言語ライブラリです。 SQLiteは、テスト環境で最も一般的に使用されるデータベースエンジンです(SQLiteのホームページを参照)。, SQLiteは、コンピュータやモバイルデバイスやブラウザのほとんどに内蔵されています。 Pythonの公式sqlite3モジュールは、SQLiteデータベースを操作するのに役立ちます。
Python sqlite3モジュールはPythonデータベースAPI仕様v2.0(PEP249)に準拠しています。 PEP249は、データベースへのアクセスに使用されるPythonモジュール間の類似性を奨励し、維持するように設計されたSQLインターフェイスを提供します。,
このチュートリアルは主に焦点を当てています:–
- PythonからSQLiteデータベースに接続し、SQLiteデータベースとテーブルを作成します。
- 次に、SQLiteデータ型をカバーし、それに対応するPython型です。
- 次に、SQLite CRUD操作を実行する方法を学びます。,また、インメモリデータベースを作成および管理し、SQLiteの値をカスタムPythonタイプに変換する方法をお知らせします
- Python内からSQLiteデータベースのバックアップを取ります
今、各セクションを見てみましょう。,
Python SQLite接続
このセクションでは、SQLiteデータベースを作成し、sqlite3モジュールを使用してpythonを介して接続する方法を知ることができます。
SQLiteへの接続を確立するには、接続するデータベース名を指定する必要があります。 すでにディスク上に存在するデータベースファイル名を指定すると、それに接続されます。 しかし、指定されたSQLiteデータベースファイルが存在しない場合、SQLiteは新しいデータベースを作成します。,
SQLiteに接続するには、次の手順に従う必要があります。
- sqlite3モジュールの
connect()
メソッドを使用し、データベース名を引数として渡します。 - 作成カーソルオブジェクトのconnectionオブジェクトによって返される接続を実行する方法をSQLite問い合わせます。
- 作業が完了したら、CursorオブジェクトとSQLiteデータベース接続オブジェクトを閉じます。
- この接続プロセス中に発生する可能性のあるデータベース例外があれば、キャッチします。
次のPythonプログラムは、新しいデータベースファイル”SQLite_Python”を作成します。,db”とSQLiteのバージョンの詳細を印刷します。
PythonからSQLiteに接続した後、次の出力を取得する必要があります。
Database created and Successfully Connected to SQLiteSQLite Database Version is: The SQLite connection is closed
SQLite接続コードを詳細に理解する
インポートsqlite3
- この行は、プログラム内のsqlite3モジュールをインポートします。 Sqlite3モジュールで定義されているクラスとメソッドを使用して、SQLiteデータベースと通信できます。
sqlite3.,connect()
-
connect()
メソッドを使用して、SQLiteデータベースへの接続を作成できます。 このメソッドはSQLite接続オブジェクトを返します。 - 接続オブジェクトはスレッドセーフではありません。 sqlite3モジュールでは、スレッド間の接続の共有は許可されません。 それでもそうしようとすると、実行時に例外が発生します。
-
connect()
メソッドは、さまざまな引数を受け入れます。 この例では、データベース名引数をconnectに渡しました。
cursor=sqliteConnection.,cursor()
- 接続オブジェクトを使用して、pythonを介してSQLiteコマンド/クエリを実行できるcursorオブジェクトを作成できます。
- 単一の接続オブジェクトから必要な数のカーソルを作成できます。 のような接続オブジェクト、このカーソルオブジェクトもいないスレッドセーフです。 sqlite3モジュールは、スレッド間でカーソルを共有することを許可しません。 それでもそうしようとすると、実行時に例外が発生します。
この後、SQLiteクエリを作成してデータベースのバージョンを取得しました。
カーソル。,execute()
- カーソルのexecuteメソッドを使用して、Pythonからデータベース操作またはクエリを実行できます。 Div id=”60cd940ce3″>メソッドはSQLiteクエリをパラメータとして受け取り、結果セット、つまりデータベース行以外を返します。この例では、
SELECT version();
SQLiteバージョンを取得するためのクエリを実行しています。,
try-except-finallyブロック:このプロセス中に発生する可能性のあるSQLiteデータベースの例外とエラーをキャッチするために、すべてのコードをtry-exceptブロック
- sqlite3モジュールの
sqlite3.Error
クラスを使用すると、PythonからSQLiteを使用しているときに発生する可能性のあるデータベースエラーと例外を処理できます。 - このアプローチを使用すると、アプリケーションを堅牢にできます。 Div id=”c2dab437d9″>クラスは、エラーを詳細に理解するのに役立ちます。 エラーメッセージとエラーコードを返します。
カーソル。閉じる()と接続します。,close()
- データベースの問題を回避するために、作業が完了したらカーソルと接続オブジェクトを閉じることをお勧めします。
PythonからSQLiteテーブルを作成します
このセクションでは、sqlite3モジュールを使用してPythonからSQLiteデータベースにテーブルを作成する方法を学びます。 Create a table文はDDLクエリであり、Pythonから実行する方法を見てみましょう。
この例では、”SQLite_Python”内に”SqliteDb_developers”テーブルを作成しています。db”データベース。,PythonからSQLiteでテーブルを作成するためのステップ:–
-
sqlite3.connect()
を使用してSQLiteに接続します。 この記事の冒頭でSQLite接続コードについて説明しました。 - create tableクエリを準備します。
- を使用してクエリを実行します
cursor.execute(query)
- 最後に、SQLiteデータベース接続とカーソルオブジェクトを閉じます。,
出力:
Successfully Connected to SQLiteSQLite table created:the sqlite connection is closed
SQLiteデータ型とそれに対応するPython型
PythonからSQLite CRUD操作を実行する上でさらに進む前に、まずSQLiteデータを理解してくださいsqliteテーブルからデータを格納および読み取るのに役立つtypeとそれに対応するpythonタイプ。
SQLiteデータベースエンジンには値を格納する複数のストレージクラスがあります。 毎に格納された値は、SQLiteデータベースが次のストレージクラスまたはデータの種類です。,
SQLiteデータ型:
- NULL:-値はNULL値です。
- INTEGER:-数値を格納します。 に格納されている整数1, 2, 3, 4, 6, または数の大きさに応じて8バイト。
- REAL:-値は浮動小数点値です、例えば、3.14PIの値
- TEXT:-値はテキスト文字列、UTF–8、UTF-16BEまたはUTF-16LEエンコーディングを使用して格納されたテキスト値です。
- BLOB:-値はデータのblob、つまりバイナリデータです。 画像やファイルを保存するために使用されます。
以下のPythonタイプは問題なくSQLiteに変換されました。, なんとなくは変更またはからの読み込みをSQLiteテーブルの行の編事業、これを認識してください。,
Python type | SQLite type |
None | NULL |
int | INTEGER |
float | REAL |
str | TEXT |
bytes | BLOB |
Perform SQLite CRUD Operations from Python
Most of the time, we need to manipulate the SQLite table’s data from Python. To perform these data manipulations, we can execute DML queries i.e.,、SQLiteの挿入、更新、Pythonからの削除操作。
これで、テーブルと列の詳細がわかりましたので、crud操作に移動しましょう。 各操作について個別のチュートリアルを作成して、詳細に説明しました。 各セクションを見てみましょう。
- PythonからSQLiteテーブルにデータを挿入する–このセクションでは、PythonからINSERTコマンドを実行してSQLiteテーブルにレコードを挿入する方法を学びます。
- PythonからSQLiteテーブルのデータを読み込む–この記事では、PythonアプリケーションからSQLite SELECTクエリを実行してテーブルの行をフェッチする方法を学びます。, また、
fetchall()
、fetchmany()
、およびfetchone()
カーソルクラスのメソッドを使用して、パフォーマンスを向上させるためにテーブルから限られた行をフェッチ - PythonからSQLiteテーブルのデータを更新する–このセクションでは、SQLiteテーブルのレコードを変更するためにpythonからUPDATEクエリを実行する方法を学びます。
- PythonからSQLiteテーブルからデータを削除する–このセクションでは、SQLiteテーブルからレコードを削除するためにpythonからDELETEクエリを実行する方法を学びます。,
カーソルのexecutescript関数を使用してSQLファイル(スクリプト)を実行します
SQLiteスクリプトは、毎日の仕事のほとんどに便利です。 SQLiteスクリプトは、ファイルとして保存されたSQLコマンドのセットです(で。sqlフォーマット)。
SQLiteスクリプトには、必要に応じてコマンドラインプロンプトから実行する一つ以上のSQL操作が含まれています。
以下は、SQLiteスクリプトを使用できるいくつかの一般的なシナリオです。
- 一度に複数のデータベースをバックアップします。
- 同じスキーマを持つ二つの異なるデータベースのテーブル内の行数を比較します。,
- すべてのCREATE TABLE SQLコマンドをデータベーススクリプトに保持します。 部として購入することができますデータベースのスキーマを他のサーバーです。
SQLiteコマンドラインからスクリプトを実行することができます。次のようにコマンドを読み取ります。
sqlite> .read mySQLiteScript.sql
この例では、二つのテーブルを作成するサンプルSQLiteスクリプトを作成しました。 これは私が作成したスクリプトです。
CREATE TABLE hardware ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, price REAL NOT NULL);CREATE TABLE software ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, price REAL NOT NULL);
Python内からSQLiteスクリプトを実行する方法を見てみましょう。
出力:PythonからSQLスクリプトを実行することによって作成されたSQLiteテーブル。,
Successfully Connected to SQLiteSQLite script executed successfullysqlite connection is closed
注意:SQLiteに接続した後、ディスクに保存されているSQLiteスクリプトファイルのすべてのコンテンツを読み取り、python文字列変数にコピーしました。 次に、cursor.executscript(script)
メソッドを呼び出して、すべてのSQLステートメントを一つの呼び出しで実行しました。
Pythonを使用してSQLiteでデジタルデータを挿入/取得する
- このセクションでは、ファイル、画像、ビデオ、曲などのデジタル情報をBLOBデータとしてpythonからSQLiteテーブルに挿入または保存する方法をお知らせします。,
- また、Pythonを使用してSQLiteに保存されているファイル、画像、ビデオ、歌、またはデジタルデータを読み取る方法を学びます。
ファイルと画像を挿入および取得するには、Python SQLite BLOBに関する完全なガイドを参照してください。
Pythonを使用してSQLite関数を作成または再定義します
Python sqlite3モジュールは、Python内からSQL関数を作成および再定義する機能を提供します。 私は詳細にそれをカバーするために別のチュートリアルを作成し Python内からSQL関数を作成および再定義する方法を参照してください。,
Python内からSQLite関数を作成または再定義する完全なガイドを参照してください。
PythonでSQLiteの日付とタイムスタンプ型を操作し、その逆も同様です
SQLiteテーブルからdateまたはDateTime値を挿入または読み取る必要がある場合があります。 したがって、日付またはタイムスタンプの値を使用している場合は、PythonでSQLite DateTime値を使用する別のチュートリアルを参照してください。
SQLiteデータベース例外
例外sqlite3。警告
- 例外のサブクラス。 そして、実行を停止しないようにしたい場合は無視することができます。,
例外sqlite3。Error
- sqlite3モジュールのその他の例外の基本クラスです。 これはExceptionのサブクラスです。
例外sqlite3。DatabaseError
- データベースに関連するエラーに対して発生した例外。
例:データベースファイルではないsqlite3データベースとしてファイルを開こうとすると、sqlite3が取得されます。DatabaseError:ファイルが暗号化されているか、データベースではありません
例外sqlite3。IntegrityError
- データベースエラーのサブクラス。, この例外は、外部キーチェックが失敗するなど、データベースのリレーショナル整合性が影響を受けるときに発生します。
例外sqlite3。ProgrammingError
- DatabaseErrorのサブクラスでもあります。 この例外は、プログラミングエラー、例えば、既に存在する同じテーブルを作成する、SQLクエリの構文エラーのために発生しました。
例外sqlite3。OperationalError
- DatabaseErrorのサブクラスでもあります。 このエラーは私たちの管理ではありません。 この例外は、データベースの操作に関連するエラーに対して発生します。,
- 例:偶発的な切断、サーバーのダウン、タイムアウトが発生し、データソースが問題になります。 サーバーダウン
例外sqlite3。NotSupportedError
- データベースでサポートされていないデータベースAPIが使用されたときに例外が発生します。
- 例:トランザクションをサポートしていない接続でrollback()メソッドを呼び出します。 呼び出しコミット作成後、作成したテーブルコマンドです。,
したがって、tryブロックにすべてのデータベース操作コードを記述することをお勧めします。exceptブロックで例外があれば例外をキャッチし、それに対して是正措置を講じることができます。
たとえば、SQLiteデータベースに存在しないテーブルにデータを挿入し、完全な例外スタックを出力してみましょう。,
出力:
Python内から接続するときにSQLite接続タイムアウトを変更します
複数の接続がSQLiteデータベースにアクセスし、データベース上のいくつかのデータ変更操作を行うプロセスの一つは、データ変更接続を実行するために、ロックすなわちを取る必要があり、SQLiteデータベースは、そのトランザクションがコミットされるまでロックされています。 データベースへの接続中に指定するtimeoutパラメーターによって、例外が発生するまでロックが解除されるまで接続が待機する時間が決まります。,
timeoutパラメーターのデフォルト値は5.0(五秒)です。 デフォルト値であるため、接続中に指定する必要はありません。 つまり、PythonからSQLiteに接続していて、5秒以内に応答が得られなかった場合、プログラムは例外を発生させます。 しかし、接続タイムアウトの問題に直面していて、それを増やしたい場合は、sqlite3.connect
関数のtimeout引数を使用してこれを行うことができます。
Python内からSQLiteを接続しているときにタイムアウト値を変更する方法を見てみましょう。,
Output:
Connected to SQLiteTotal rows are: (2,)The Sqlite connection is closed
SQLiteデータベース接続が開かれてからの変更の合計を識別します
監査または統計目的でデータベース接続が開かれてから変更、挿入、または削除されたデータベース行の数を検索する場合は、Python sqlite3モジュールのconnection.total_changes
メソッドを使用できます。
connection.total_changes
メソッドは、影響を受けたデータベース行の合計数を返します。 Pythonの例を見て、データベース接続が開かれてから行われた変更の合計を見てみましょう。,
出力:
Connected to SQLiteTotal Rows affected since the database connection was opened: 3sqlite connection is closed
Python内からSQLiteデータベースのバックアップを取る
Python sqlite3モジュールは、SQLiteデータベースのバックアップを取る関数を提供します。 connection.backup()
メソッドを使用すると、SQLiteデータベースのバックアップを取ることができます。
connection.backup(target, *, pages=0, progress=None, name="main", sleep=0.250)
この関数はSQLiteデータベースのバックアップを取り、コピーは別の接続インスタンスでなければならない引数targetに書き込まれます。, デフォルトでは、またはページが0または負の整数の場合、データベース全体が単一のステップでコピーされます。
name引数には、コピーするデータベースを指定します。 Sleep引数は、データベースの残りのページをバックアップする連続した試行の間にスリープする秒数を定義します。 sleep引数は、整数または浮動小数点値のいずれかとして指定できます。
既存のデータベースを別のデータベースにコピーする例を見てみましょう。,
出力:
注:
- SQLiteに接続した後、二つの異なる接続を使用して両方のデータベースを開きました。
- 次に、最初の接続インスタンスを使用して
connection.backup()
メソッドを実行しました。 また、各反復でコピーするデータベースページの数を指定しました。
Python SQLite演習プロジェクト
PythonでデータベースプログラミングをマスターするためのPythonデータベースプログラミング演習を解いてください。
Leave a Reply