使用python 3.5与pandas和sqlalchemy

时间:2017-01-18 20:43:16

标签: sql-server python-3.x csv pandas sqlalchemy

问题

我正在尝试使用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的连接字符串在某种程度上或可能是错误的,但不知道出了什么问题,因为我遵循了文档。

  • 我相信我处于无DSN状态。因此,试图通过文档中描述的其他方式进行连接。
  • 我正在使用此link来帮助我在create_engine中创建连接字符串部分。
  • 我尝试to_sql写入数据库,但认为我的连接字符串可能仍然搞砸了?我在stackoverflow上咨询了这个question
  • 更新我添加了驱动程序规范MaxU和指定的sqlalchemy文档。但是,我收到一条错误消息,指出找不到我的数据源名称,并且没有使用to_sql指定默认驱动程序。我是否还需要为to_sql驱动程序提供信息?如果是这样,文档或示例代码在哪里显示我出错的地方?

由于未来的目标和需求,我正在努力学习python并将其用作脚本语言。我将不胜感激任何协助,帮助,指导。

1 个答案:

答案 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 2005:
  

SQL Server Native Client

  • SQL Server 2008:
  

SQL Server Native Client 10.0

  • SQL Server 2016:
  

SQL Server Native Client 11.0

或者,您可以使用pymssql

engine = create_engine('mssql+pymssql://<username>:<password>@<freetds_name>/?charset=utf8')