SQL ServerのテーブルをPandasのDataFrameに読み込んだり、逆に書き出したりする方法の備忘録です。
ドライバにpymssqlを使います。また書き出しには
$ pip install pymssql SQLAlchemy
DataFrameへの読み込み
まずはSQL ServerのテーブルからDataFrameへ読み込みます。
read_sqlメソッドを使います。
import pandas as pd # 接続情報 server = "db.host" database = "db_name" username = "user_name" password = "PaSsWoRd" with pymssql.connect(server=server, user=username, password=password, database=database) as conn: sql = """ SELECT id, name, email, created_at FROM users """ df = pd.read_sql(sql, conn)
テーブルへの書き込み
今度はDataFrameからテーブルへです。
流れは、SQLAlchemyでお目当てのDBに接続し、to_sqlメソッドで書き込みます。
name
はテーブル名、schema
はスキーマ名をそれぞれ指定con
にSQLAlchemyのDBエンジンを渡すif_exists
にはテーブルが存在した場合の挙動で、"append"なら気にせずインサート、"replace"なら再作成、"fail"ならそこでエラーになります (デフォルトは"fail")index
がFalseの場合はインデックスをインサートするカラムに含めないようにします (デフォルトはTrue)- インデックスのカラム名は
index_label
で指定できます (指定しない場合はインデックス名がそのまま使われます)
- インデックスのカラム名は
from sqlalchemy import create_engine connection_string = 'mssql+pymssql://user_name:PaSsWoRd@db.host/db_name' engine = create_engine(connection_string) df.to_sql(name='users', con=engine, schema='dbo', if_exists='append', index=False)