Существуют ли какие-либо конкретные методы, чтобы моя программа на Python продолжалась с убитой строки? - PullRequest
1 голос
/ 09 февраля 2012

У меня есть рабочая программа, которая выполняет некоторые преобразования, но я очень боюсь, что произойдет, если база данных станет слишком большой.

Я поясню, как, если приведенные ниже программные бомбы посередине, как мне восстановить программу или заставить ее работать из указанной строки кода.

Определенно процесс будет убит после выполнения фрагмента кода.

Сможет ли программа продолжить возврат с того места, где она получила ошибку, или с позиции, в которой она была убита.

import sqlite3 as sqlite
import ConfigParser
config = ConfigParser.RawConfigParser()
config.read('removespecial.ini')

con = sqlite.connect('listofcomp.sqlite')
cur = con.cursor()

def transremovechars():
    char_cfg = open('specialchars.txt', 'r')        #Reads all the special chars to be           removed from specialchars.txt#
    special_chars = char_cfg.readline()
    char_cfg.close()
    cur.execute('select * from originallist')       
for row in cur:                                 #Applies transformation to remove chars for each row in a loop#
    company = row[0]
    for bad_char in special_chars:
            company =  company.replace(bad_char, '')
            cur.execute('Create table transform1 (Names Varchar, Transformtype Varchar')
            cur.execute('Insert into transform1 (Names)', company)


def transtolower():
    cur.execute('select * from transform1')         #Transformation to convert all the namesto lower cases#
    for row in cur:
        company = row[0]
        company = company.lower()
        cur.execute('Create table transform2 (Names Varchar, Transformtype Varchar')        #Creates another table named transform2#
        cur.execute('Insert into transform2 (Names)', company)                              #Copies all the lower cased names to transform2#



if __name__=="__main__":

transremovechars()
transtolower()  

1 Ответ

2 голосов
/ 09 февраля 2012

если нижеприведенные программные бомбы посередине, как мне восстановить программу или заставить ее работать из указанной строки кода

Вы не можете.

Ваш код очень таинственный, потому что таблица создания получит сообщение об ошибке перед каждой вставкой, кроме первой.

Если, однако, вы хотите сделать длинный ряд вставок из одной старой таблицы в одну новую таблицу, и вас беспокоит вероятность того, что он не завершится правильно, у вас есть два варианта для сохранения необходимой информации о состоянии.

  1. Уникальные ключи.

  2. Порции.

  3. запрос.

Уникальные ключи .

Если каждая строка имеет уникальный ключ, некоторые вставки получат ошибку, потому что строка является дубликатом.

Если программа «Бомба», вы просто перезапустите. Вы получаете много дубликатов (что вы ожидали). Это не неэффективно.

Порции .

Другой метод, который мы используем, - это запросить все строки из старой таблицы и включить «пакетный» номер, который увеличивается каждые 1000 строк. batch_number = row_count // 1000.

Вы создаете файл "номер серии" с номером -1.

Ваша программа запускается, она читает номер партии. Это последняя партия, которая была закончена.

Вы читаете исходные данные, пока не доберетесь до номера партии> последнего, который закончился.

Затем вы делаете все вставки из партии.

Когда номер партии изменяется, выполните фиксацию и запишите номер партии в файл. Таким образом, вы можете перезапустить любую партию.

При перезапуске после «бомбы» вы можете получить несколько дубликатов из частичной партии (что вы ожидали). Это не неэффективно.

Запрос .

Вы можете запрашивать перед каждой вставкой, чтобы увидеть, существует ли строка. Это неэффективно.

Если у вас нет уникального ключа, вы должны выполнить сложный запрос, чтобы увидеть, была ли строка создана при предыдущем запуске программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...