Python操作數(shù)據(jù)庫(kù)格式化數(shù)據(jù)

利用 python 數(shù)據(jù)庫(kù)連接,對(duì)型如:aaa&bbb&ccc 這樣的標(biāo)簽組,拆分為標(biāo)簽和bookid 對(duì)應(yīng)的多對(duì)多數(shù)據(jù)表。

# -*- coding:utf-8 -*-
import mysql.connector
import gc
import sys

default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)

sys.setdefaultencoding(default_encoding)


def cb_conncet_sql(sql_query):
    # 創(chuàng)建數(shù)據(jù)庫(kù)連接方法
    config = {'host': 'localhost',
              'user': 'root',
              'password': 'root',
              'port': 3306,
              'database': 'doubanbook',
              'charset': 'utf8',
              'buffered': True
              }
    cnn = mysql.connector.connect(**config)
    try:
        cursor = cnn.cursor()
        cursor.execute(sql_query)
        cnn.commit()
        cds = cursor.fetchall()
        # print ('查詢成功:' + str(cds))
        return cds
    except mysql.connector.Error as e:
        if format(e) != 'No result set to fetch from.':
            print sql_query
            print('connect fails!{}'.format(e))
    finally:
        cursor.close()
        cnn.close()
        gc.collect()


if __name__ == '__main__':
    sql_query = "SELECT * FROM doubanbook.tagtemp;"
    result = cb_conncet_sql(sql_query)
    counts = 0
    for row in result:
        bookid = row[1]
        tags = row[2].split('&')
        for tag in tags:
            sql_install = "INSERT INTO doubanbook.tags (`bookid`,`tagname`) " \
                          "VALUES ("+"'"+bookid+"'"+","+"'"+tag+"'"+");"
            # print sql_install
            counts += 1
            cb_conncet_sql(sql_install)
            # break
    print counts

反思:

tagtemp 這張表是從 books 表中的 id 字段和 tags 字段摘出來(lái)的表。tagtemp表中的數(shù)據(jù)有 574282條數(shù)據(jù)。

這樣,一邊查數(shù)據(jù),然后再拆分成多條記錄(最后拆出來(lái)的有2,229,934)。效率上特別慢。

應(yīng)該用多線程,用sql 的聯(lián)合插入,或者sql 的事務(wù)來(lái)加速整個(gè)過(guò)程的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容