Pythonを使用しAzure SQLデータベースのテーブルにデータを挿入・登録してみます。
この記事は「Pythonを使用しAzure SQLデータベースに接続しテーブルを作成する」の続きでもあります。
なお、Azure SQLデータベースのテーブルにデータを挿入・登録するために、pyodbcモジュールを用います。このライブラリ・モジュールはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■仮想環境への切り替え
C:\Users\user_>cd azure_db
C:\Users\user_\azure_db>.venv\Scripts\activate.bat
Pythonを使用しAzure SQLデータベースに接続しテーブルを作成する際に仮想環境を構築しましたが、仮想環境に入るために、上記のコマンドを入力し、Enterキーを押します。仮想環境のディレクトリ内に作成された activateスクリプトを実行し、仮想環境に入ります。
(.venv) C:\Users\user_\azure_db>
Enterキーを押すと、「(.venv)」と表示されます。これで仮想環境に入ることができました。
■pyodbcを用いてAzure SQLデータベースのテーブルにデータを挿入・登録する
入った後に「azure_db」ディレクトリ内に「sql_db_data1.py」というスクリプトファイルを作成します。作成後、コードエディタでこのファイルを開き、ファイルの中身(コード)を記述していきます。
■コード
import pyodbc db_server = 'サーバー名' database = 'データベース名' username = 'データベースのユーザー名' password = 'データベースのパスワード' driver = '{ODBC Driver 18 for SQL Server}' with pyodbc.connect('DRIVER='+driver+';SERVER=tcp:'+db_server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+password) as conn: with conn.cursor() as cursor: cursor.execute("INSERT INTO test1(id, name, price) VALUES (1, '田中', 100);") cursor.commit()
今回はimportでpyodbcモジュールを呼び出します。その後、db_server,database,username,password,driverという変数をそれぞれ定義します。定義した後にそれぞれの変数にAzureでSQLデータベースを作成した際に設定したサーバー名,データベースのユーザー名,データベースのパスワードを格納します。格納後、driver変数内に今回は「{ODBC Driver 18 for SQL Server}」と記述します。記述後、ODBC Driver for SQL Server のダウンロード(https://docs.microsoft.com/ja-JP/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver16)にアクセスし、Windows用のMicrosoft ODBC Driver 18をダウンロードします。今回はPC環境にあわせて「 Microsoft ODBC Driver 18 for SQL Server (x86)」をダウンロードし、ダウンロードされた「msodbcsql.msi」のファイルをダブルクリックします。ダブルクリックすると、「ODBC Driver 18 for SQL Serverのセットアップ」ウィザードが表示されますので、ウィザードを進めてインストールを行います。この「Microsoft ODBC Driver for SQL Server」がないまま、スクリプトファイルを実行すると、「pyodbc.InterfaceError: (‘IM002’, ‘[IM002] [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバーが見つかりません。 (0) (SQLDriverConnect)’)」というエラーが発生します。
インストール後、with構文とpyodbc.connect()を用います。pyodbc.connect()の括弧内には引数,パラメータとしてODBCドライバ,サーバ名,データベース名,ユーザID,パスワードを渡します。これでコネクション(通信路)取得します。取得後、with構文とconn.cursor()を用います。conn.cursor()でカーソルを作成します。カーソルは、クエリを実行し、データベースからレコードをフェッチするオブジェクトです。
カーソルを作成後、cursor.execute()を用います。括弧内には引数,パラメータとしてSQLクエリの実行を行うため、SQL文を渡します。今回は「INSERT INTO」で、前回作成した「test1」というテーブル内のid,name,priceという3つのカラム(列)に、1つずつデータを登録します。なお、今回は3つのカラム(列)に「1, ‘田中’, 100」というデータを登録します。
実行後、conn.commit()を用いて、変更内容を保存(コミット)します。保存(コミット)後、ファイルを保存します。
■実行・検証
保存後、コマンドプロンプト上で仮想環境に入った状態でスクリプトファイルを実行してみます。
(.venv) C:\Users\user_\azure_db>python sql_db_data1.py
実行してみると、何も出力されませんが、データベースのテーブルへのデータの挿入・登録は完了となります。
完了後、「Microsoft Azure Portal」にログインし、ホームから「サービス」の「SQLデータベース」へ移動し、作成したデータベースの名前をクリック。クリックすると、データベースの詳細が表示され、左メニューから「クエリ エディター (プレビュー)」をクリックします。クリック後、作成したテーブルを指定し、クエリを実行してみると、今回追加したデータを確認することができました。確認できましたが、nameのカラム(列)(NVARCHAR:Unicode文字を含む可変長の文字列)に登録・挿入したデータ(日本語)が文字化けを起こしていた。
この文字化けを解消するためには、Unicode文字列の前にNプレフィックスを付けることで文字化けを解消できます。
■コード
cursor.execute("INSERT INTO test1(id, name, price) VALUES (2, N'佐々木', 110);")
「sql_db_data1.py」のスクリプトファイル内のコードで、cursor.execute()を用い、括弧内には引数,パラメータとしてSQLクエリの実行を行うため、SQL文を渡したが、これを上記のコードに変更し、Unicode文字列の前に大文字の”N”を必ず記述する。
変更後、再度仮想環境に入り、スクリプトを実行してみます。
実行してみると、今度はnameのカラム(列)(NVARCHAR)に登録・挿入したデータ(日本語)が文字化けせずに登録・挿入されていることを確認できました。
コメント