python从sqlserver提取数据_通过Python读取sqlserver数据写成json文件的总结
最近在做將sqlserver的數(shù)據(jù)遷移到redshift上面,然后再做的過程當(dāng)中出現(xiàn)了很多問題。(通過sqlserver 讀取數(shù)據(jù),然后寫成json文件然后長(zhǎng)傳到S3上面,然后通過S3copy的形式將數(shù)據(jù)寫入到redshift上面)
第一次通過csv的形式然后通過s3copy的形式將數(shù)據(jù)長(zhǎng)傳,里面出險(xiǎn)了一些特殊的字符(比如\n \t \r)就很坑爹,這就是csv不好的地方。
遇到的問題1:
使用pands讀取sql,然后將數(shù)據(jù)轉(zhuǎn)成json之后,發(fā)現(xiàn)redshift不能加載直接轉(zhuǎn)成的json。
轉(zhuǎn)成的json格式,出險(xiǎn)了上面的兩遍帶有[]的標(biāo)識(shí)而且中間有逗號(hào)分隔,這樣的json數(shù)據(jù)不能被redshift識(shí)別。要想識(shí)別還得重新對(duì)數(shù)據(jù)進(jìn)行清洗。
問題2:
通過下面的這種方式讀取的數(shù)據(jù),然后將每一行的數(shù)據(jù)轉(zhuǎn)成一個(gè)dataframe的形式再寫成json的形式,然后把文件打開然后再將數(shù)據(jù)寫入到文件當(dāng)中。
但是這種的數(shù)據(jù)在逐條寫入的時(shí)候,速度就特別的慢。40萬的數(shù)據(jù),寫了一個(gè)小時(shí)沒寫完。
connect = pymssql.connect(host=sqlserver_host, user=sqlserver_username,
password=sqlserver_pwd, database=sqlserver_dbname, port=sqlserver_port) # 建立連接
cursor = connect.cursor()
if connect:
print("sqlserver連接成功!")
sql = ‘‘‘select * from %s a‘‘‘ % (sqlserver_script)
print(sql)
cursor.execute(sql) # 執(zhí)行sql語(yǔ)句
columnDes = cursor.description # 獲取連接對(duì)象的描述信息
columnNames = [columnDes[i][0] for i in range(len(columnDes))]
rs = cursor.fetchall()
f = open(‘/data/etl_log/sqlserver_data/{name}.json‘.format(name=sqlserver_script), ‘a(chǎn)‘)
count=0
for i in rs:
df = pd.DataFrame([list(i)], columns=columnNames)
#df = df.applymap(lambda x: str(x).replace(‘\r‘, ‘‘).replace(‘\n‘, ‘‘).replace(‘\t‘, ‘‘))
#df = df.applymap(replace_func,axis=0)
ss = df.to_json(orient=‘records‘).replace(‘[‘, ‘‘).replace(‘]‘, ‘‘)
f.write(ss+‘\n‘)
print(count)
count+=1
f.close()
讀取速度慢的原因,一條數(shù)據(jù)在轉(zhuǎn)成df的時(shí)候產(chǎn)生了很多對(duì)象。這個(gè)導(dǎo)致內(nèi)存不能釋放,所以速度很慢
最終的解決方案是通過map的形式將數(shù)據(jù)轉(zhuǎn)成一個(gè)list,然后做成字典的形式,然后轉(zhuǎn)化為json,然后寫入到文件當(dāng)中這樣的速度還可以,40萬的數(shù)據(jù)差不多10分鐘不到。
for i inrs:
list_= list(map(lambda x: str(x).replace(‘\t‘, ‘‘).replace(‘\n‘, ‘‘).replace(‘\r‘, ‘‘), i))
ss=json.dumps(dict(zip(columnNames, list_)))
f.write(ss+‘\n‘)
print(count)
count+=1
至此問題得到解決。
原文:https://www.cnblogs.com/gxgd/p/11844891.html
總結(jié)
以上是生活随笔為你收集整理的python从sqlserver提取数据_通过Python读取sqlserver数据写成json文件的总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos安装mysql wsl_如何
- 下一篇: element表格里面放图片_Eleme