Python DataFrame 导入至 Microsoft SQL Sever 数据库 – Python量化投资

Python DataFrame 导入至 Microsoft SQL Sever 数据库

本文将介绍如何把处理好的dataframe中的数据写入到Microsoft SQL Sever数据库中。

而Pandas中DataFrame.to_sql方法的使用是实现此功能的关键:

函数如下:
DataFrame.to_sql(name, con, schema=None, if_exists=’fail’, index=True, index_label=None, chunksize=None, dtype=None, method=None)

函数解析:


to_sql函数参数解析.png

to_sql函数的各个参数解析完毕,接下来将进行项目实践:

1、导入pandas库,导入sqlalchemy模块中的create_engine,需要利用它来进行连接数据库

import pandas as pd
from sqlalchemy import create_engine

2、连接数据库

engine = create_engine('mssql+pymssql://sa:123456@192.168.0.57/advertising')

该代码解析如下:
create_engine(“数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口/数据库”)

3、在SQL Sever数据库中建表

这一步要在Microsoft SQL Sever数据库中新建表,设计表的类型,以存储接下来DataFrame中的数据,名称一一对应,使得两者能够相匹配并成功传入。

已在SQL Server的advertising数据库中新建名为sales_data的表

以下代码在SQL Sever中操作:

CREATE TABLE sales_data
(
    ASIN VARCHAR(255),
    Keywords VARCHAR(255),
    tf-idf FLOAT(8)
)

至此,数据库中已新建sales_data表,列名分别为ASIN、Keywords、tf-idf,数据类型分别为VARCHAR VARCHAR FLOAT。

4、设置dataframe与数据库列名和数据类型对应

dtypedict = {
      'ASIN': NVARCHAR(length=255),
      'Keywords': NVARCHAR(length=255),
      'tf-idf': Float()
    }

解析:dtypedict是to_sql中的一个参数,目标是设置dataframe与数据库列名和数据类型对应,使得dataframe的数据能够一一对应SQL Sever中的表,完全一致地传导进去。
若不设置此项,可能会导致Dataframe的数据类型传导进去后,数据库中的数据类型被迫发生了自动改变,造成两者的数据类型不一致。
例如:DataFrame中 ASIN的数据类型为VARCHAR(5),传进去数据库后,数据类型变成了VARCHAR(40),进而导致错误发生。

5、运用to_sql函数,将Dataframe中的数据导入SQL SEVER

假设之前的步骤中已处理完数据,并保存在df中。

df.to_sql(name='sales_data', con=engine, if_exists='replace', index=False, dtype=dtypedict)

解析:name是要出入的表,con是第二步连接数据库的步骤,if_exists参考本文开头的函数解析,index=False不出现索引,dtype是第四步的设置。

确认无误后运行代码,在数据库中查看,df中的数据成功导入到sales_data表中。

最后完整代码如下:

import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('mssql+pymssql://sa:123456@192.168.0.57/advertising')
dtypedict = 
{
      'ASIN': NVARCHAR(length=255),
      'Keywords': NVARCHAR(length=255),
      'tf-idf': Float()
}
df.to_sql(name='sales_data', con=engine, if_exists='replace', index=False, dtype=dtypedict)

https://www.jianshu.com/p/c2125d1b23e5

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论