SQLServerインスタンスでのバックエンドプロセスの自動化は一般的なタスクです。統計の更新、インデックスの再構築、データの読み取り、削除のいずれであっても、他のプログラミングフレームワークをRDBMSと統合することは非常に価値があります。この記事では、Pythonと特に統合されたこれらのタイプのタスクについて検討します。
SQLやPythonとは何か、それらをどこでどのように使用するかなどの基本的な質問には焦点を当てません。代わりに、SQLとPythonの組み合わせが必要な特定のケースと、そのために利用できるさまざまなメソッドモジュールについて説明します。
SQLServer接続文字列
PythonがSQLサーバーに接続する場合を検討する前に、基本を理解しましょう。
接続文字列は、データベースインスタンスをポイントして認証するために必要なデータを表します。データベースインスタンスの種類ごとに微妙な違いがある場合がありますが、通常、必要な情報はサーバー名、データベースドライバー、ユーザー名、パスワード、ポート番号です。
SQLServerインスタンスの詳細
この接続文字列の詳細は、SSMSを介してデータベースインスタンスに接続する場合と同じになります。データベースインスタンス{SERVER}\ {INSTANCE}に注意してください フォーマット–ここでは DESKTOP-6L1B155 \ FogelDev 。単一のデフォルトインスタンスのみを実行している場合は、サーバー名に接続することもできます。
SQLServerデータベースとテーブルの作成
まず、PythonとSQLServerで動作するために必要なテーブル構造を持つデータベースが必要です。次のスクリプトは、そのようなデータベースとその中に単一のテーブルを作成します。この表は、SQLとPythonを一緒に使用する方法を確認するためのデモンストレーション領域として機能します。
CREATE DATABASE CODESIGHT_DEMOS;
USE CODESIGHT_DEMOS;
CREATE TABLE POSTS
(
ID INT IDENTITY(1,1) PRIMARY KEY,
NAME VARCHAR(200),
Author VARCHAR(100),
URL VARCHAR(100),
DATE DATE
)
INSERT INTO POSTS
VALUES('Properly Dealing with Encryption of Databases in an AlwaysOn Availability Group Scenario','Alejandro Cobar','https://codingsight.com/encryption-of-databases-in-alwayson-availability-group-scenario/','4/23/2021')
INSERT INTO POSTS
VALUES('An Overview of DataFrames in Python','Aveek Das','https://codingsight.com/an-overview-of-dataframes-in-python/','4/23/2021')
INSERT INTO POSTS
VALUES('SQL Server Business Intelligence (BI) – Traditional Tools and Technologies','Haroon Ashraf','https://codingsight.com/sql-server-business-intelligence-bi-tools-and-technologies/','4/19/2021')
Pythonモジュール
ここでの目標は、PythonをSQLサーバーインスタンスに接続する方法を定義することです。このタスクを実行するために複数のPythonモジュールを使用でき、そのうちの2つがプライマリです。 PYODC およびSQLAlchemy 。これらのモジュールは、操作の接続部分を処理します。
SQL Serverテーブルからメモリにデータを読み込むには、追加のコードが必要です。ここがパンダ ライブラリが入ります。
パンダ SQLALchemyと緊密に統合できます データをDataFrameに直接読み込むには オブジェクト(メモリアレイベースのストレージ内で、超高速で動作し、データベーステーブルのように見えます)。
いくつかの接続文字列の例を見てみましょう。
最初の例では、前のスクリーンショットのSQLServerとインスタンスを使用しています。これらの変数を特定の詳細に設定して、接続をインスタンス化できます。
この特定の接続はWindows認証を使用することにも注意してください。したがって、ログインしているWindowsマシンからユーザーとして認証を試みます。ユーザー名とパスワードが指定されていない場合、これが接続文字列のデフォルトの動作になります。
- サーバー名 =「DESKTOP-6L1B155」
- インスタンス名 =「FogelDev」
- データベース名 =「CODESIGHT_DEMOS」
- ポート番号 =‘1433’
print("mssql+pyodbc://@{SERVER}:{PORT}\\{INSTANCE}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber))
MSSQLengine = sqlalchemy.create_engine("mssql+pyodbc://@{SERVER}\\{INSTANCE}:{PORT}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber))
Pandasでクエリを実行することにより、この接続が正しく機能するかどうかをテストできます。 read_sql_query を使用して、接続文字列からクエリを読み取る必要があります コマンド。
df = pd.read_sql_query("SELECT * FROM POSTS", MSSQLengine)
df
SQLServer認証
SQLServerに接続するためにSQLServer認証ベースの接続文字列を使用する必要がある場合はどうなりますか? Pythonコードを調整して、ユーザー名とパスワードを SQLALchemyに追加できます。 エンジン。
- サーバー名=「DESKTOP-6L1B155」
- Instancename =‘FogelDev’
- Databasename =‘CODESIGHT_DEMOS’
- ポート番号=‘1433’
- ユーザー名=「CodingSightUser」
- Password =‘Password123’
print("mssql+pyodbc://{USER}:{PASS}@{SERVER}:{PORT}\\{INSTANCE}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber,USER = Username, PASS = Password))
MSSQLengine = sqlalchemy.create_engine("mssql+pyodbc://{USER}:{PASS}@{SERVER}\\{INSTANCE}:{PORT}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber,USER = Username, PASS = Password))
繰り返しになりますが、接続をテストしていますが、今回はテーブルから1つのレコードのみを選択しています。
df = pd.read_sql_query("SELECT TOP 1 * FROM POSTS", MSSQLengine)
df
データの書き込み
最後に、PythonデータをSQLServerデータベーステーブルに取り込む方法を見てみましょう。 Dataframeオブジェクトを作成し、それをテーブルに追加します。
データフレーム方式:
newdata = [{'Name': 'How to Create the Date Table in Power BI', 'Author': 'Haroon Ashraf', 'URL':'https://codingsight.com/how-to-create-date-table-in-power-bi/', 'Date':'4/21/21'}]
load_df = pd.DataFrame(newdata)
load_df.to_sql("POSTS", MSSQLengine, if_exists='append',index = False, chunksize = 200)
もう1つの方法は、executeコマンドを使用してデータをテーブルに直接挿入することです。
Executeメソッド:
MSSQLengine.execute("INSERT INTO [POSTS] VALUES('SQL Query Optimization: 5 Core Facts to Boost Queries','Edwin Sanchez','https://codingsight.com/sql-query-optimization-5-core-facts-to-boost-queries/','3/31/21')");
完了すると、ファイナルテーブルは次のようになります。最初のSQLServer作成スクリプトによって最初の3行が読み込まれ、4行と5行がPythonによって読み込まれます。
概要
この投稿では、PythonコードをSQLServerに接続するための接続文字列パラメーターに焦点を当てました。 SQL Serverからのデータの読み取りを検討し、2つの異なる認証方法を確認しました。PythonがSQLサーバーに接続する特定のケースのWindows認証と標準のSQLサーバー認証です。また、データをロードする方法を確認しました。1つはPythonでオブジェクトDataFrameを使用する方法で、もう1つは生のSQLINSERTコマンドです。