日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python从sqlserver提取数据_通过Python读取sqlserver数据写成json文件的总结

發(fā)布時(shí)間:2024/9/30 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python从sqlserver提取数据_通过Python读取sqlserver数据写成json文件的总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近在做將sqlserver的數(shù)據(jù)遷移到redshift上面,然后再做的過程當(dāng)中出現(xiàn)了很多問題。(通過sqlserver 讀取數(shù)據(jù),然后寫成json文件然后長傳到S3上面,然后通過S3copy的形式將數(shù)據(jù)寫入到redshift上面)

第一次通過csv的形式然后通過s3copy的形式將數(shù)據(jù)長傳,里面出險(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)識而且中間有逗號分隔,這樣的json數(shù)據(jù)不能被redshift識別。要想識別還得重新對數(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語句

columnDes = cursor.description # 獲取連接對象的描述信息

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)生了很多對象。這個(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文件的总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。