码迷,mamicode.com
首页 > 数据库 > 详细

使用PYODBC将数据从Pandas的DataFrame写入SQL Server

时间:2020-06-21 10:12:44      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:axis   cep   cut   rsize   buffers   serve   服务器   ase   数字   

    总公司的某数据以文件形式存放在FTP服务器上,现将其移植到我本地的SQL服务器。

   我已有连接pyodbc

 1 import pyodbc
 2 import pandas as pd
 3 from ftplib import FTP
 4 import sqlalchemy
 5 
 6 ip=XXX.XXX.XXX.XXX
 7 port=21
 8 username=XXX
 9 password=XXXXX
10 ftp=FTP()
11 ftp.connect(ip,port)
12 ftp.login(username,password)
13 ftp.cwd(./cds) #进入到我的子目录
14 buffersize=1024
15 filename=3407_20200101_20200607.unl
16 try:
17 with open(filename,rb) as fp:
18     ftp.retrbinary(RETR %s%os.path.basename(filname), fp.write,buffersize) 
19 except:
20     pass
21 ftp.quit()
22 #由于informix生成的unl文件为cp936编码,pandas 读取时会对有些汉字报错,所以转为utf-8
23 with open(filename,r,encoding=cp936) as fp1,open(_temp.txt,w,encoding=utf-8) as fp2:
24     fp2.write(fp1.read())
25 
26 #本地为SQLServer+pyodbc,并已经建立了ODBC-DSN ,下面为关键代码
27 engine = sqlalchemy.create_engine("mssql+pyodbc://<username>:<password>@<dsnname>")
28 
29 #对_tmp.txt 文件读取时,要注意纯数字的(编码、ID等等)格式转换(可直接转换成object),
30 
31 #否则Pandas会自动转换为float或bigint
32 
33 df=pd.read_csv(_temp.txt,sep=|,header=None,dtype={5:object,7:object})
34 
35 #(我的数据文件无列名,第5和7列为数值型文本,从第0列开始)
36 #最后一列为空,drop掉
37 df=df.drop(28,axis=1)
38 #增加列名,title为列名list
39 title=[‘‘,‘‘,‘‘,...]
40 df.columns=title
41 
42 # 写pandas 的 DataFrame 到SQLServer的一个表
43 df.to_sql("table_name", engine,index=False)
44 
45 #这样建立的表实质上数据类型与我的预期是不符的
46 #通过已建立符合预期的结构表来改变类型
47 with engine.connect() as con:
48     con.execute(DROP TABLE if exists table_name)
49     con.execute(CREATE TABLE table_name LIKE table_example;)
50 
51 df.to_sql(table_name, engine, index=False, if_exists=append)
52 
53 #至此,完美!

 

使用PYODBC将数据从Pandas的DataFrame写入SQL Server

标签:axis   cep   cut   rsize   buffers   serve   服务器   ase   数字   

原文地址:https://www.cnblogs.com/cjtds/p/13162185.html

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!