Excelシートを取得してSQLServer Express(Windows認証を使用)データベースにテーブルとしてインポートできるPythonスクリプトを作成しようとしています。これを行うには、pandas
Excelファイルを_pandas DataFrame
_に読み込むには、pandas.to_sql()
を使用してデータをデータベースにインポートします。ただし、この関数を使用するには、sqlalchemy.create_engine()
。
pyodbc
だけを使用してデータベースに接続し、テストクエリを実行できます。この接続は、次のコードで行われます。
_def create_connection(server_name, database_name):
config = dict(server=server_name, database= database_name)
conn_str = ('SERVER={server};DATABASE={database};TRUSTED_CONNECTION=yes')
return pyodbc.connect(r'DRIVER={ODBC Driver 13 for SQL Server};' + conn_str.format(**config))
...
server = '<MY_SERVER_NAME>\SQLEXPRESS'
db = '<MY_DATABASE_NAME>
connection = create_connection(server, db)
cursor = connection.cursor()
cursor.execute('CREATE VIEW test_view AS SELECT * FROM existing_table')
cursor.commit()
_
ただし、pandas.to_sql()
を使用できないため、これはあまり使用されません。そのためには、sqlalchemy.create_engine()
のエンジンが必要ですが、同じものの使用方法を理解するのに苦労しています。上記のcreate_connection()
関数の詳細を使用して、エンジンを正常に作成し、データベースに接続します。
私は次のように多くの組み合わせを試しました:
_engine = create_engine("mssql+pyodbc://@C<MY_SERVER_NAME>\SQLEXPRESS/<MY_DATABASE_NAME>?driver={ODBC Driver 13 for SQL Server}?trusted_connection=yes")
conn = engine.connect().connection
_
または
_engine = create_engine("mssql+pyodbc://@C<MY_SERVER_NAME>\SQLEXPRESS/<MY_DATABASE_NAME>?trusted_connection=yes")
conn = engine.connect().connection
_
A 正確なPyodbc文字列をパススルー はPython 3.6 on Windows:
from sqlalchemy import create_engine
import urllib
conn_str = (
r'Driver=ODBC Driver 11 for SQL Server;'
r'Server=(local)\SQLEXPRESS;'
r'Database=myDb;'
r'Trusted_Connection=yes;'
)
quoted_conn_str = urllib.parse.quote_plus(conn_str)
engine = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted_conn_str))
cnxn = engine.connect()
rows = cnxn.execute("SELECT name FROM sys.tables").fetchall()
print(rows)