現代のほとんどのアプリケーションは、非常に頻繁にデータベースとやり取りしています。
そして、SQL(Structured Query Language)は、データベース内に保存されたデータにアクセスし、操作することをより容易にしてくれます。
Pythonは人気のある言語の1つであり、組み込みとサードパーティの両方のSQLライブラリをサポートしています。
次のセクションでは、SQLiteと呼ばれる最も人気のあるライブラリの1つを使用して、PythonでSQLを使用する方法について説明します。
SQLite入門
このチュートリアルで SQLite を選択した理由は、そのサーバーレスアーキテクチャにあります。
SQLiteは高速かつ軽量で、データベース全体をファイルやPCの内部メモリ(RAM)に保存することができます。
SQLiteは、テスト環境において開発者によって高度に使用されています。
モジュールSQLiteはPythonにネイティブで付属しています。
ですから、pipを使って外部にインストールする必要はありません。
しかし、SQLiteのシンプルさを軽視してはいけません。
SQLiteは本番環境向けの大きなデータベースも扱えるからです。
これらの特徴から、SQLiteは初級者から中級者までの開発者に最適なモジュールと言えます。
この記事もチェック:PythonでAnacondaのインストール、開発環境構築をする方法
PythonでSQLを使うためのステップ
PythonスクリプトでSQLを使うには、以下の手順に従います。
1. SQLite のインポート
Pythonでモジュールを使用するための最初のステップは、ファイルの一番上でそれをインポートすることです。
Python3では、このモジュールは “sqlite3 “として知られています。
import sqlite3 #Importing the module
|
2. データベースとの接続を作成する
モジュールをインポートしたら、”connect() “メソッドを使用してデータベースオブジェクトを作成し、引数としてデータベースファイルのパスを渡す必要があります。
現在データベースがない場合は、同じコマンドで、指定したファイルパス/名前で新しいデータベースを作成します。
import sqlite3 #Importing the module
conn = sqlite3.connect( "databasename.db" )
""" Here, conn is the database object and 'databasename.db' is the actual database we're trying to connect with. If there is no database available then the same command will trigger to create a new database of the same name in our current directory.""" |
3. カーソルオブジェクトの作成
データベースオブジェクトを作成したら、Pythonを使用してデータベースオブジェクトにネイティブなSQLコマンドを実行できる別のオブジェクトを設定する必要があります。
そのために必要なことは、データベースオブジェクトの “cursor() “メソッドを呼び出すだけです。
すべてのSQLコマンドは、カーソルオブジェクトで実行されなければなりません。
curr = conn.cursor() #Here 'curr' is our new cursor object.
|
4. SQL コマンドによるテーブルの作成
このセクションでは、現在のデータベースに基本的なテーブルを設定し、テーブルが実際にファイルに保存されるようにコミットする方法を学習します。
# SQL command that creates a table in the database createTableCommand = """ CREATE TABLE NSA_DATA (
username VARCHAR(50), phonenumber VARCHAR(15), password VARCHAR(50), baddeedcount INT, secrets VARCHAR(250) );""" # Executing the SQL command curr.execute(createTableCommand) # Commit the changes conn.commit() |
まず、SQL コマンドを文字列の形にする必要があります。
次に、カーソル・オブジェクトの “execute()” メソッドを呼び出し、引数として文字列を渡します。
最後に、データベースオブジェクトの “commit() “メソッドを呼び出す必要があります。
さもないと、変更が実際のデータベースに反映されません。
そのため、変更をコミットすることを忘れてはいけません。
5. データベースへのデータ追加
データベース・スキーマを作成した後に行うことは、データの追加です。
次のコマンドに従って、その方法を学びましょう。
# First, we write our SQL command within a string and assign it to a variable addData addData = """INSERT INTO NSA_DATA VALUES('abcd', '0123456789', 'Password1o1', 23, 'None Yet');"""
print ( "The data has been added!" )
# Then we execute the command curr.execute(addData) # And finally commit conn.commit() |
出力してください。
INSERT INTO NSA_DATA VALUES('abcd', '0123456789', 'Password1o1', 23, 'None Yet') The data has been added! |
しかし、もし、データベース内にインポートしたいデータのリストがある場合、それらを一つ一つ確認することなく、2次元配列からデータベースにデータをインポートする方法を紹介します。
# The 2D array containing required data data = [[ 'abcd' , '0123456789' , 'Password1o1' , 23 , 'None Yet' ],
[ 'oswald' , '0123456888' , 'SunnyDay' , 0 , 'None Yet' ],
[ 'nobitanobi' , '3216548876' , 'ilovedoracake' , 357 , 'many of them' ]]
# A for loop to iterate through the data and add them one by one. for i in data:
addData = f """INSERT INTO NSA_DATA VALUES('{i[0]}', '{i[1]}', '{i[2]}', '{i[3]}', '{i[4]}')"""
print (addData) # To see all the commands iterating
curr.execute(addData)
print ( "Data added successfully!" )
conn.commit() |
結果は以下の通りです。
INSERT INTO NSA_DATA VALUES('abcd', '0123456789', 'Password1o1', '23', 'None Yet') INSERT INTO NSA_DATA VALUES('oswald', '0123456888', 'SunnyDay', '0', 'None Yet') INSERT INTO NSA_DATA VALUES('nobitanobi', '3216548876', 'ilovedoracake', '357', 'many of them') Data added successfully! |
6. データの取得
最後に、日々の技術的な必要性に応じて、データベースからデータを抽出して処理することも必要です。
このプロセスは、上記のセクションで行ってきたことと非常によく似ていますが、ほんの少し変更点があります。
カーソルオブジェクトを使用して検索クエリを実行したら、すぐに結果を返してくれるわけではありません。
その代わりに、データを取得するために、カーソルのメソッド “fetchall() “を使用する必要があります。
# Our search query that extracts all data from the NSA_DATA table. fetchData = "SELECT * from NSA_DATA"
# Notice that the next line of code doesn't output anything upon execution. curr.execute(fetchData) # We use fetchall() method to store all our data in the 'answer' variable answer = curr.fetchall()
# We print the data for data in answer:
print (data)
|
結果は以下の通りです。
('abcd', '0123456789', 'Password1o1', 23, 'None Yet') ('abcd', '0123456789', 'Password1o1', 23, 'None Yet') ('oswald', '0123456888', 'SunnyDay', 0, 'None Yet') ('nobitanobi', '3216548876', 'ilovedoracake', 357, 'many of them') ('abcd', '0123456789', 'Password1o1', 23, 'None Yet') ('oswald', '0123456888', 'SunnyDay', 0, 'None Yet') ('nobitanobi', '3216548876', 'ilovedoracake', 357, 'many of them') |
まとめ
Pythonを使って基本的なSQLの操作を行う方法を学んでいただけたと思います。
SQLiteだけが利用可能なライブラリではないことも知っておいてください。
実稼働レベルでは、PostgreSQLやMySQLのような、より高度なデータベースが推奨されます。
Pythonの中での使い方はほとんど同じですが。
The Completed Code:
次のセクションは、このチュートリアルで使用される完全なコードを含んでいます。
PythonでSQLを使ったテーブルの作成
import sqlite3
conn = sqlite3.connect( "database.db" )
curr = conn.cursor()
createTableCommand = """CREATE TABLE NSA_DATA (
username VARCHAR(50), phonenumber VARCHAR(15), password VARCHAR(50), baddeedcount INT, secrets VARCHAR(250) );""" try :
curr.execute(createTableCommand)
print ( "Table Successfully Created!" )
except :
print ( "There was an error with Table creation" )
finally :
conn.commit()
|
結果は以下の通りです。
Table Successfully Created! |
PythonでSQLを使ったデータの追加を行う。
import sqlite3
conn = sqlite3.connect( "database.db" )
curr = conn.cursor()
# The 2D array containing required data data = [[ 'abcd' , '0123456789' , 'Password1o1' , 23 , 'None Yet' ],
[ 'oswald' , '0123456888' , 'SunnyDay' , 0 , 'None Yet' ],
[ 'nobitanobi' , '3216548876' , 'ilovedoracake' , 357 , 'many of them' ]]
# A for loop to iterate through the data and add them one by one. for i in data:
addData = f """INSERT INTO NSA_DATA VALUES('{i[0]}', '{i[1]}', '{i[2]}', '{i[3]}', '{i[4]}')"""
print (addData) # To see all the commands iterating
curr.execute(addData)
print ( "Data added successfully!" )
conn.commit() |
結果は以下の通りです。
INSERT INTO NSA_DATA VALUES('abcd', '0123456789', 'Password1o1', '23', 'None Yet') INSERT INTO NSA_DATA VALUES('oswald', '0123456888', 'SunnyDay', '0', 'None Yet') INSERT INTO NSA_DATA VALUES('nobitanobi', '3216548876', 'ilovedoracake', '357', 'many of them') Data added successfully! |
PythonでSQLを使ったデータの取得を行う。
import sqlite3
conn = sqlite3.connect( "database.db" )
curr = conn.cursor()
fetchData = "SELECT * from NSA_DATA"
curr.execute(fetchData) # We use fetchall() method to store all our data in the 'answer' variable answer = curr.fetchall()
# We print the data for data in answer:
print (data)
|
結果は以下の通りです。
('abcd', '0123456789', 'Password1o1', 23, 'None Yet') ('oswald', '0123456888', 'SunnyDay', 0, 'None Yet') ('nobitanobi', '3216548876', 'ilovedoracake', 357, 'many of them') |
参考文献
Python sqlite3 公式ドキュメンテーション