我正在尝试使用python来读取我的csv文件并将其作为新表放入Microsoft SQL Server 2016。简单地说,我不想在SQL上创建一个表并导入csv,我想在python中编写一个脚本,可以读取csv并为我在SQL中创建一个新表。
更新
我可能不得不重新考虑我的做法。我更正了驱动程序,但是我从to_sql
收到以下错误。我认为我的身份验证方案有问题。遗憾的是,to_sql
文档和sql_alchemy
并没有太多亮点。开始考虑替代方案。
sqlalchemy.exc.DBAPIError was unhandled by user code
Message: (pyodbc.Error) ('08001', '[08001] [Microsoft][SQL Server Native Client 11.0]Named Pipes Provider: Could not open a connection to SQL Server [53]. (53) (SQLDriverConnect)')
import pandas as pd
import sqlalchemy
#Read the file
data = pd.read_csv(file.csv)
#Connect to database and write the table
server = "DERPSERVER"
database = "HERPDB"
username = "DBUser"
password = "password"
tablename = "HerpDerpTable"
driver = "SQL+Server+Native+Client+11.0"
#Connect to SQL using SQL Server Driver
print("Connect to SQL Server")
cnxn = sqlalchemy.create_engine("mssql+pyodbc://"+username+":"+password+"@"+server +"/"+database + "?driver="+driver)
更新
我按如下方式重写了字符串,但它不起作用:
sqlalchemy.create_engine('mssql+pymssql://'+username+':'+ password + '@' + server + '/' + database + '/?charset=utf8')
data.to_sql(tablename, cnxn);
这些是我的方法中需要注意的一些重要事项。请特别注意我在下面分享的第二个要点。我认为create_engine
的连接字符串在某种程度上或可能是错误的,但不知道出了什么问题,因为我遵循了文档。
to_sql
写入数据库,但认为我的连接字符串可能仍然搞砸了?我在stackoverflow上咨询了这个question。to_sql
指定默认驱动程序。我是否还需要为to_sql
驱动程序提供信息?如果是这样,文档或示例代码在哪里显示我出错的地方? 由于未来的目标和需求,我正在努力学习python并将其用作脚本语言。我将不胜感激任何协助,帮助,指导。
答案 0 :(得分:4)
您应该明确指定MS SQL Server驱动程序if you use SQLAlchemy version 1.0.0+:
示例:
engine = create_engine("mssql+pyodbc://scott:tiger@myhost:port/databasename?driver=SQL+Server+Native+Client+10.0")
版本1.0.0中更改:基于主机名的PyODBC连接现在需要显式指定SQL Server驱动程序名称。 SQLAlchemy的 这里不能选择最佳默认值,因为它因平台而异 并安装了驱动程序。
List of Native SQL Server Client Names
SQL Server Native Client
SQL Server Native Client 10.0
SQL Server Native Client 11.0
或者,您可以使用pymssql
:
engine = create_engine('mssql+pymssql://<username>:<password>@<freetds_name>/?charset=utf8')