python存資料庫速度過慢問題的解決

2021-10-10 04:47:47 字數 3444 閱讀 3062

在專案中遇到乙個問題,需要從文字中讀取三萬條資料寫入mysql資料庫,檔案中為用@分割的sql語句,但是在讀取的過程中發現速度過慢,三萬八千條資料需要220秒,問題**片段如下:

def

read_to_mysql

(filecata, targetdir)

:'''

用來寫入資料庫,寫入後會剪貼掉檔案

filecata 為儲存有檔案位址的list,已去掉尾部的空格

:param filecata: 檔案目錄

:param targetdir: 要複製的目標目錄

:return:

'''root_dir = os.path.abspath(os.path.join(os.getcwd(),

"./"))

config = configparser.configparser(

) config.read(root_dir +

"/config.ini"

) __host = config.get(

"databaseofwrt"

,"host"

) __database_name = config.get(

"databaseofwrt"

,"database"

) __user_name = config.get(

"databaseofwrt"

,"username"

) __user_passwaord = config.get(

"databaseofwrt"

,"password"

) __charset = config.get(

"databaseofwrt"

,"charset"

) conn = pymysql.connect(

host=__host,

user=__user_name, password=__user_passwaord,

database=__database_name,

charset=__charset

)cursor = conn.cursor(

)with

open

(filecata,

"r", encoding=

'utf-8'

)as f:

data = f.read(

)# 讀取檔案

data_list = data.split(

'@')

del data_list[-1

] starttime =

int(time.time())

for data_str in data_list:

data_str =

str(data_str)

sql = data_str +

';' cursor.execute(sql)

conn.commit(

)print

(flag)

copy_del_file(filecata, targetdir)

# 用來剪下的函式,此處不影響,因而省略

cursor.close(

) conn.close(

)

經測試發現,影響速度的主要原因是commit(),因為沒過幾秒提交一次即可,但是因為提交的字元長度有限制,所以要設定乙個合理的時間讀取,**修改如下:

def

read_to_mysql

(filecata, targetdir)

:'''

用來寫入資料庫,寫入後會剪貼掉檔案

filecata 為儲存有檔案位址的list,已去掉尾部的空格

:param filecata:

:param targetdir: 要複製的目標目錄

:return:

'''root_dir = os.path.abspath(os.path.join(os.getcwd(),

"./"))

config = configparser.configparser(

) config.read(root_dir +

"/config.ini"

) __host = config.get(

"databaseofwrt"

,"host"

) __database_name = config.get(

"databaseofwrt"

,"database"

) __user_name = config.get(

"databaseofwrt"

,"username"

) __user_passwaord = config.get(

"databaseofwrt"

,"password"

) __charset = config.get(

"databaseofwrt"

,"charset"

) conn = pymysql.connect(

host=__host,

user=__user_name, password=__user_passwaord,

database=__database_name,

charset=__charset

)cursor = conn.cursor(

)with

open

(filecata,

"r", encoding=

'utf-8'

)as f:

data = f.read(

)# 讀取檔案

data_list = data.split(

'@')

del data_list[-1

] starttime =

int(time.time())

for data_str in data_list:

endtime =

int(time.time())

data_str =

str(data_str)

sql = data_str +

';' cursor.execute(sql)

if endtime - starttime ==10:

# 每過十秒提交一次

starttime =

int(time.time())

conn.commit(

) conn.commit(

) copy_del_file(filecata, targetdir)

cursor.close(

) conn.close(

)return flag

此時寫入三萬八千條資料需要9秒

解決Docker pull映象速度過慢的問題

目前,docker擁有中國的官方映象,具體內容可訪問 在使用時,docker 中國官方映象加速可通過 registry.docker cn.com 訪問。該映象庫只包含流行的公有映象。私有映象仍需要從美國映象庫中拉取。docker pull registry.docker cn.com myname...

夠快雲庫輕鬆解決檔案複製速度過慢

我們平常在拷貝檔案的時候會發現大檔案拷貝起來往往需要很長時間,而刪除起來卻很快。稍微細心一點的朋友可能發現了,我們在拷貝檔案的時候是按檔案大小來計時的,即mb 秒,而在刪除檔案的時候卻是按檔案數量來計時的,即項 秒。為什麼會這樣呢?這就要從檔案複製以及刪除原理說起了。硬碟中有個專門的區域,用來記錄硬...

python 訪問sqlite資料庫路徑問題

想通過同乙個py檔案py mysql內的方法呼叫連線 sqlite3資料庫,在路徑上的設定可以直接設定在當前py mysql目錄下。但實際上,這樣會報錯,資料庫內沒有任何東西,因為sqlite3資料庫在連線的時候如果沒有這個資料庫會自動建立乙個,但是裡面的 這個是需要自己建立 插入資料的。沒有這個 ...