Как записать значение по умолчанию в столбец, где значением по умолчанию является значение, созданное из функции, которая использует другой столбец? - PullRequest
0 голосов
/ 26 октября 2018

Создайте флеш-приложение, в котором используется файл .docx (home / user / WebApp / app / docxfiles / *. Docx) и отобразите их с помощью sqlalchemy. Используя MySQL. Столбцы пишутся из колбы-админа. Вот фрагмент кода, который вы не можете сделать правильно. Как записать значение по умолчанию в столбец, где значением по умолчанию является значение, созданное из функции, которая использует другой столбец?

class Item(db.Model):
    def getinfo(namefile):
        path_file = os.path.abspath(os.path.dirname(__file__)) + "/docxfiles/" + namefile
        doc = docx.Document(path_file)
        fulltext = []
        for i in doc.paragraphs:
            fulltext.append(i.text)
        body = '\n\n'.join(fulltext)
        return re.sub('<(.|\n)*?>','',body)

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    namefile = db.Column(db.String(200), unique=True)
    info = db.Column(db.String(16777216), server_default = getinfo(namefile))

1 Ответ

0 голосов
/ 28 октября 2018

Значения столбца по умолчанию, переданные как значения server_default или default, полезны для установки фиксированных значений по умолчанию или даты или временных меток, но не принимают аргументы времени выполнения для более сложной обработки, как в вашем примере. Правильным местом для размещения такого кода является конструктор класса вашей модели, который будет вызываться только при создании нового объекта, но не при извлечении объекта из базы данных. Единственные изменения, которые необходимы в вашем коде для выполнения этой работы, - это превратить функцию getinfo в метод __init__ и вручную установить значения namefile и info.

class Item(db.Model):
    def __init__(self, namefile):
        path_file = os.path.abspath(os.path.dirname(__file__)) + "/docxfiles/" + namefile
        doc = docx.Document(path_file)
        fulltext = []
        for i in doc.paragraphs:
            fulltext.append(i.text)
        body = '\n\n'.join(fulltext)

        self.info = re.sub('<(.|\n)*?>','',body)
        self.namefile = namefile

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    namefile = db.Column(db.String(200), unique=True)
    info = db.Column(db.String(16777216))
...