Уведомления

Группа в Telegram: @pythonsu

#1 Июль 4, 2014 10:06:26

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

Из transbase в mysql. jython

Доброго времени суток!
Задача передо мной стоит такая - нужно из БД transbase (БД написаная только под винду) перегнать в Мускуль. БД большая (список всех больниц и лечебных пунктов во всем мире) - таблицы в несколько десятков гигабайт.

from com.ziclix.python.sql import zxJDBC
from settings import *
from org.python.core import codecs
codecs.setDefaultEncoding('utf-8')
tableName = "TB_IMAGES"
mysqlTable = "TB_IMAGES"
try:
    
    connTD = zxJDBC.connect(dbUrl, dbUser, dbPassword, dbDriver)
    cursorTD = connTD.cursor(True)
    #connect to MySQL
    mysqlConn = zxJDBC.connect(url, user, password, driver, autoReconnect="true")
    cursorMySQL = mysqlConn.cursor(True)
    
    
    cursorTD.execute("SELECT * FROM %s" % tableName)
    
    cursorMySQL.execute("DROP TABLE IF EXISTS %s" % mysqlTable)
    cursorMySQL.execute("CREATE TABLE IF NOT EXISTS %s (`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `IMAGENAME` text , `IMAGEDATA` blob)" %(mysqlTable))
    
     mysqlConn.commit()
   
    
    for result in cursorTD.fetchall():
        if result[1] == None:
            result = list( result )
            result[1] = "Null"
            result = tuple( result )
        
        #print "INSERT INTO %s ( `ID`,`TYPEID`, `COUNTRYID`, `LTFINISHED`) VALUES ( %s, %s, %s )" % (mysqlTable, result[0], result[1], result[2])
        cursorMySQL.execute("INSERT INTO %s ( `IMAGENAME`, `IMAGEDATA`) VALUES ( '%s', %s)" % (mysqlTable, result[0], result[1]))
            
        mysqlConn.commit()
    #mysqlConn.commit()
except Exception, e:
    print e

Так вот у меня в цикле mysqlConn.commit() от чего оно жутко тормозит. Когда вывожу из цикла, то появляется ошибка. Может есть другой путь? Менее затратный к аппаратным ресурсам? Спасибо.

Отредактировано helm2004 (Июль 4, 2014 10:07:34)

Офлайн

#2 Июль 22, 2014 14:33:49

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

Из transbase в mysql. jython

Сам написал, сам отвечу (как всегда :) ):

    i = 1
    querry = ""
    for result in cursorTD.fetchall():
        if i == 1:
            querry = "INSERT ignore INTO %s ( `id`, `KORID`,`LANGCODE`,  `TEXTSTR`) VALUES (%s, %s, '%s', '%s' )" % (mysqlTable, i, result[0], result[1], result[2])
#пустые строки заменяем на мускульные
        if result[1] == None:
            result = list( result )
            result[1] = "Null"
            result = tuple( result )
        if result[2] == None:
            result = list( result )
            result[2] = "Null"
            result = tuple( result )
       
        
        
        querry += ",(%s, %s, '%s', '%s' )" % (i, result[0], result[1], result[2])
        i += 1
    print len(cursorTD.fetchall()) 
    print querry
    cursorMySQL.execute(querry)
    mysqlConn.commit()

Производительность скорости записи в мускульувеличилась в на порядок, а то и на два.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version