zoukankan      html  css  js  c++  java
  • 使用 pyodbc 将数据从Pandas的DataFrame写入SQL Server

       【原创】如引用,请注明出处,谢谢!

       总公司的某数据以文件形式存放在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("IF OBJECT_ID('table_name') IS NOT NULL TRUNCATE TABLE table_name ELSE SELECT * INTO FROM table_name_bak WHERE 1=0 ")
    49
    df.to_sql("table_name", engine,index=False,if_exists='append')
    50 #至此,完美!
  • 相关阅读:
    UVA 11925 Generating Permutations 生成排列 (序列)
    UVA 1611 Crane 起重机 (子问题)
    UVA 11572 Unique snowflakes (滑窗)
    UVA 177 PaperFolding 折纸痕 (分形,递归)
    UVA 11491 Erasing and Winning 奖品的价值 (贪心)
    UVA1610 PartyGame 聚会游戏(细节题)
    UVA 1149 Bin Packing 装箱(贪心)
    topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
    UVA 1442 Cave 洞穴 (贪心+扫描)
    UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  • 原文地址:https://www.cnblogs.com/cjtds/p/13162185.html
Copyright © 2011-2022 走看看