我正在尝试编写一个Python脚本,该脚本可以获取Excel工作表并将其作为表格导入我的SQL Server Express(带有Windows身份验证)数据库。为此,我使用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
答案 0 :(得分:11)
Pass through exact Pyodbc string适用于Windows上的Python 3.6:
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)