如何将默认值写入列,其中默认值是从使用另一列的函数创建的值?
How do I write a default value to a Column where the default value is a value created from a function that uses another Column?
制作 flask-app,使用 .docx 文件 (home/user/WebApp/app/docxfiles/*.docx) 并使用 sqlalchemy 显示它们。使用 MySQL。列是从 flask-admin 编写的。这是一段代码,你不能做对。如何将默认值写入 Сolumn,其中默认值是从使用另一个 Сolumn 的函数创建的值?
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))
作为 server_default
或 default
值传递的列默认值对于设置固定默认值或日期或时间戳很有用,但不接受运行时参数以允许更复杂的处理,例如在您的示例中。放置此类代码的正确位置是在模型 class 的构造函数中,它只会在创建新对象时调用,而不是在从数据库中检索对象时调用。要使此工作正常进行,您的代码中唯一需要更改的是将 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))
制作 flask-app,使用 .docx 文件 (home/user/WebApp/app/docxfiles/*.docx) 并使用 sqlalchemy 显示它们。使用 MySQL。列是从 flask-admin 编写的。这是一段代码,你不能做对。如何将默认值写入 Сolumn,其中默认值是从使用另一个 Сolumn 的函数创建的值?
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))
作为 server_default
或 default
值传递的列默认值对于设置固定默认值或日期或时间戳很有用,但不接受运行时参数以允许更复杂的处理,例如在您的示例中。放置此类代码的正确位置是在模型 class 的构造函数中,它只会在创建新对象时调用,而不是在从数据库中检索对象时调用。要使此工作正常进行,您的代码中唯一需要更改的是将 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))