国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

pyDAL一個python的ORM(終) pyDAL的一些性能優(yōu)化

這篇具有很好參考價值的文章主要介紹了pyDAL一個python的ORM(終) pyDAL的一些性能優(yōu)化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、大批量插入數(shù)據(jù)

對于 大量數(shù)據(jù)插入時,雖然pyDAL也手冊中有個方法:bulk_insert(),但是手冊也說了,雖然方法上是一次可以多條數(shù)據(jù),如果后端數(shù)據(jù)庫是關系型數(shù)據(jù)庫,他轉(zhuǎn)換為SQL時它是一條一條的插入的,只有在NoSQL數(shù)據(jù)庫時能提速,bulk_insert()的用法如下,感興趣的看看:

db.person.bulk_insert([{'name':'Alex','age':'11'}, 
???????????????????????{'name': 'John','age':'22'}, 
?                      {'name': 'Tim','age':'33'}])

那后端是關系數(shù)據(jù)庫時,有其他辦法嗎?答案是我們利用前面 我們提到:db.executesql()方法,直接用SQL,下面是例子,

1、目標:

MySQL數(shù)據(jù)庫我們一次插入2000萬的csv文件(普通PC是無法直接打開這么多行的數(shù)據(jù)文件的

2、解決思路:

(1)分塊讀取,分塊插入,我們已知csv各列的名為:col1,col2,col3,我們每次讀10萬行,插入庫10萬行);

(2)使用db.executesql()方法,編寫SQL批量插入語句

(3)特別注意:將你的數(shù)據(jù)庫的單條語句的數(shù)據(jù)包大小適當調(diào)大。就mysql而言:

# 服務器接受的數(shù)據(jù)包的大小,在執(zhí)行數(shù)據(jù)量較大的單條語句,如果超過了默認限制,就會報錯,提示這個參數(shù)大小不足
max_allowed_packet=100M

3、MySQL批量插入數(shù)據(jù)語法:

INSERT INTO table_name (column1, column2,...) VALUES ("value1_1", "value1_2",...), ("value2_1", "value2_2", ...)......;

4、示例代碼:

我們使用到了pandas庫,pandas的read_csv()方法可以對非常方便的對大文件分塊讀?。?/strong>

import pandas as pd
df_chunk = pd.read_csv('my.csv', chunksize=100000, iterator=True)
for chunk in df_chunk:
??? insert_values = ''
??? for row in range(0, chunk.shape[0]):
??????? insert_values += '("' + str(chunk.iloc[row,0]) + '","' + str(chunk.iloc[row,1]) + '","' + str(chunk.iloc[row,2]) + '"),'
??? db.executesql('INSERT INTO my_table (col1,col2,col3) VALUES ' + insert_values[:- 1] + ';')
??? db.commit()

二、對于結(jié)果集很大的查詢做遍歷循環(huán)iterselect

? ? ?如果我們要對一個查詢結(jié)果集做遍歷循環(huán),且結(jié)果數(shù)據(jù)很大,例如:

for row in db(db.IMEI_table.IMEI.contains('666')).select():

.....

常規(guī)的上述寫法,一定是先查詢得到 完整的結(jié)果放在內(nèi)存中,在做遍歷循環(huán),很吃內(nèi)存,性能也低,針對這種情況,pyDAL提供了iterselect()方法,使用也很方便,如下:

for row in db(db.IMEI_table.IMEI.contains('666')).iterselect():

????? ...

當數(shù)據(jù)量較大時,iterselect()不僅速度快,還節(jié)省內(nèi)存:文章來源地址http://www.zghlxwxcb.cn/news/detail-804809.html

到了這里,關于pyDAL一個python的ORM(終) pyDAL的一些性能優(yōu)化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包