SQLiteデータベース用のPythonインターフェース
SQLiteはオープンソースデータベースであり、サーバーレスであり、構成は必要ありません。データベース全体は、オペレーティングシステムのファイルシステムのどこにでも配置できる単一のディスクファイルです。 SQLiteコマンドは標準SQLに似ています。 SQLiteは、内部データストレージ用のブラウザなどのアプリケーションで広く使用されています。組み込みデバイスの便利なデータストレージでもあります。
標準のPythonライブラリには、SQLiteデータベース接続のサポートが組み込まれています。 GerhadHaringによって作成されたDB-APIV2準拠のモジュールであるsqlite3モジュールが含まれています。 DB-API2.0に準拠しています。
DB-APIは、さまざまなデータベース製品へのアクセスに使用されるPythonモジュール間の類似性を確保するために、PEP-249に従って定義されています。
データベース処理プロセスの最初のステップは、データベースを表す接続オブジェクトを取得することです。次に接続を使用して、カーソルオブジェクトを取得します。カーソルオブジェクトは、イテレータの概念に似ています。これは、データベースクエリによって返される個々の行を処理するために使用されます。カーソルは、一連の行の1つの行へのポインタと見なすことができます。
カーソルオブジェクトは、基盤となるデータベースでCRUD操作を実行するためのSQLクエリの実行に役立ちます。
Connect()関数
sqlite3モジュールのこの関数は、ディスク上の既存のデータベースを表す接続オブジェクトを返すか、まだ存在しない場合は新しいデータベースを開きます。
import sqlite3 conn=sqlite3.connect('mydb.sqlite3')
SQLiteはインメモリデータベースの作成をサポートしています。その目的のために特別な名前「:memory:」を使用してください
conn=sqlite3.connect(':memory:')
Connectionクラスでは以下のメソッドが定義されています
cursor() このメソッドはカーソルオブジェクトを返します。
cur=conn.cursor()
commit() −このメソッドは、トランザクションを永続的にディスクにコミットします。
rollback() −このメソッドは、トランザクションをロールバックして、データベースの状態をcommit()の最後の呼び出しに復元します。このメソッドは、SQLトランザクションで例外が発生した場合のデータの一貫性を保証します。
try: conn.commit() except: conn.rollback()
execute() −暗黙的にカーソルを作成し、そのexecute()メソッドを呼び出します
executemany() −このメソッドは暗黙的にカーソルを作成し、そのexecutemany()メソッドを呼び出します
create_function() −このメソッドは、後でSQLステートメント内から使用できるユーザー定義関数を作成します。
create_aggregate() −このメソッドは集計関数を作成します。
iterdump() −このメソッドは、SQLテキスト形式でデータベースのダンプを作成します。
import sqlite3 con = sqlite3.connect('mydb.sqlite3') f = dump.sql', 'w') for line in con.iterdump(): f.write('%s\n' % line)
backup() −このメソッドは、アクセス中であってもSQLiteデータベースのバックアップを作成します。
source = sqlite3.connect('mydb.sqlite3') dest = sqlite3.connect(':memory:') source.backup(dest)
カーソルオブジェクト
接続オブジェクトから取得したカーソルにより、execute()メソッドを使用してデータベースでさまざまなSQL操作を実行できます。たとえば、次のステートメントは現在のデータベースにテーブルを作成します
cur = conn.cursor() cur.execute("CREATE TABLE guests ( ID INTEGER PRIMARY KEY, name TEXT (20) NOT NULL, address TEXT (40), city TEXT (20) );"
以下は、テーブルにレコードを挿入します
cur.execute('''INSERT INTO GUESTS VALUES(1,'RAJU','ABIDS', 'HYDERABAD');''')
executemany()メソッドを使用して、一括加算操作を実行します
addreses=[(2,'KISHAN', 'TILAK ROAD', 'PUNE'), (3, 'LATA', 'GAANDHI NAGAR', 'AURANGABAD')] sql='INSERT INTO GUESTS VALUES (:ID, :NAME, :ADD, :CITY)' cur.executemany(sql, addreses)
SELECTクエリは、クエリへの応答として返されるすべてのレコードを含む結果セットを形成します。 execute()メソッドは、SELECTクエリステートメントを表す文字列を使用します。 DB-APIには、結果セットを表すカーソル内の行を取得するための2つの方法があります。
fetchone() −フェッチされたレコードの各列の値で構成されるタプルの形式で、結果セットから次に使用可能なレコードをフェッチします。
fetchall() −残りのすべてのレコードをタプルのリストの形式でフェッチします。各タプルは1つの行に対応し、テーブルの各列の値が含まれています。
次のコードは、fetchone()メソッドを使用して、ゲストテーブル内のすべてのレコードを一覧表示します
sql = "SELECT * from guests;" cur = db.cursor() cur.execute(sql) while True: record=cur.fetchone() if record==None: break print (record)
fetchall()メソッドの使用は、次のステートメントで示されます
sql = "SELECT * from guests;" cur = db.cursor() cur.execute(sql) set = cur.fetchall() for record in set: print (record)
SQLiteとPythonのタイプ
SQLiteデータ型は、デフォルトで次の表のように同等のPythonデータ型にマップされます
Pythonタイプ | SQLiteタイプ |
---|---|
なし | NULL |
int | 整数 |
フロート | 本物 |
str | テキスト |
バイト | BLOB |
例外
DB-APIは、SQLiteデータベースを使用したSQL操作に関して次の例外を定義しています-
DatabaseError | |
IntegrityError | データベースのリレーショナル整合性が影響を受ける場合に発生する例外。例:外部キーチェックは失敗します。これはDatabaseErrorのサブクラスです。 |
ProgrammingError | プログラミングエラー(テーブルが見つからないかすでに存在する、SQLステートメントの構文エラー、指定されたパラメータの数が間違っているなど)で例外が発生しました。 |
OperationalError | データベースの操作に関連し、必ずしもプログラマーの制御下にあるとは限らないエラーに対して発生した例外、 |
NotSupportedError |
-
PythonでTkinterボタンのコマンドメソッドを変更する
Buttonウィジェットの重要性は、アプリケーションで特定の操作を実行するためのイベントを処理するために使用されることです。このようなイベントを処理するために、通常、特定の操作を含むメソッドを定義します。 イベントを変更したいとします。 ボタンを初期化した後のメソッド。 configure(options)を使用して、ボタンとそのハンドラーを構成できます。 方法。したがって、新しいメソッドを定義してボタンを構成することで、同じボタンで新しいイベントをトリガーできます。 例 #Import tkinter library from tkinter import * #Create an i
-
PyMongoおよびデータベースエンジン用の他のPythonモジュール
一般に、開発者はシェルスクリプトを使用して、データのエクスポートとインポート、データベース(DB)統計の収集、テーブルスペースの監視、セッションのブロック、DBロックなどのデータベースタスクを自動化します。 概要 Python®は、過去7年以上にわたって最も人気のあるプログラミング言語の1つになりました。この投稿では、さまざまなデータベースエンジン用にPythonで使用されるさまざまなDBモジュールについて説明し、PyMongoモジュールを使用してデータをクエリしてMongoDB®コレクションに挿入する方法を示します。 Pythonモジュールの概要 Pythonは、オブジェクト指向の高級プ