Форум сайта python.su
Доброго времени суток!
Задача передо мной стоит такая - нужно из БД 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
Отредактировано helm2004 (Июль 4, 2014 10:07:34)
Офлайн
Сам написал, сам отвечу (как всегда :) ):
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()
Офлайн