如果默认值是从使用另一列的函数创建的值,如何将默认值写入列?

muk1a3rh  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(400)

制作flask app,即使用.docx文件(home/user/webapp/app/docxfiles/*.docx)并使用sqlalchemy显示它们。使用mysql。列是从flask admin写入的。这里有一段代码你做不好。如何将默认值写入с列,其中默认值是从使用另一个函数的函数创建的值с列?

  1. class Item(db.Model):
  2. def getinfo(namefile):
  3. path_file = os.path.abspath(os.path.dirname(__file__)) + "/docxfiles/" + namefile
  4. doc = docx.Document(path_file)
  5. fulltext = []
  6. for i in doc.paragraphs:
  7. fulltext.append(i.text)
  8. body = '\n\n'.join(fulltext)
  9. return re.sub('<(.|\n)*?>','',body)
  10. id = db.Column(db.Integer, primary_key=True, autoincrement=True)
  11. namefile = db.Column(db.String(200), unique=True)
  12. info = db.Column(db.String(16777216), server_default = getinfo(namefile))
uujelgoq

uujelgoq1#

传递为的列默认值 server_default 或者 default 值对于设置固定的默认值、日期或时间戳很有用,但不接受运行时参数以允许更复杂的处理,如示例中所示。放置此类代码的正确位置是在模型类的构造函数中,该构造函数仅在创建新对象时调用,而在从数据库检索对象时不调用。代码中唯一需要做的更改就是 getinfo 将函数转换为 __init__ 方法和手动设置 namefile 以及 info .

  1. class Item(db.Model):
  2. def __init__(self, namefile):
  3. path_file = os.path.abspath(os.path.dirname(__file__)) + "/docxfiles/" + namefile
  4. doc = docx.Document(path_file)
  5. fulltext = []
  6. for i in doc.paragraphs:
  7. fulltext.append(i.text)
  8. body = '\n\n'.join(fulltext)
  9. self.info = re.sub('<(.|\n)*?>','',body)
  10. self.namefile = namefile
  11. id = db.Column(db.Integer, primary_key=True, autoincrement=True)
  12. namefile = db.Column(db.String(200), unique=True)
  13. info = db.Column(db.String(16777216))
展开查看全部

相关问题