SQLalchemy:多个表一个模式,并在启动时动态创建表

时间:2016-05-08 19:41:35

标签: flask sqlalchemy flask-sqlalchemy

我正在构建一个Flask应用程序,它在启动时应该读取一些tsv文件,每个文件都有相同的模式,将它们放在表格中(每个文件一个),然后用户将指定他们想要查询哪些表/文件,以及一些键。

我不知道如何做到这一点,但最好的方法似乎是指定一个架构,然后,一旦应用程序启动,读取文件并为每个文件动态创建表。我无法在SQLalchemy文档中找到任何关于如何多次使用相同模式的提及。也许我需要扩展我的架构类,但我不确定如何在启动时执行此操作。

提前致谢!

- 编辑 -

看起来这回答了我的一半问题: Flask-SQLAlchemy. Create several tables with all fields identical

所以现在我的问题是:你可以在Flask中执行上述操作,并且可以在应用程序启动时执行此操作吗?

1 个答案:

答案 0 :(得分:2)

你可以采取两种方法。

  1. 子类化 - 为模式创建基础Mixin,并为每个具体表创建子类。如果您希望将来不同表的模式可能出现分歧,则此方法很有用。如果只需要在一个表中添加新字段,则只能在子类中添加它。 (变量db,Model等用于flask sqlalchemy quickstart

    class BaseMixin(object):
         name = db.Column(String(80), unique=True)
         field2 = db.Column ...
    
    class SubClass1(BaseMixin, db.Model)         
         pass
    
    class Subclass2(BaseMixin, db.Model)
         additional_field_for_subclass2 = db.Column(...
         pass
    
  2. 所有人的公用表 - 如果您确信所有表的架构都保持不变。我建议您为所有数据创建一个表,并附加一个字段 data_source ,它将指示行/数据的来源。

    class CommonTable(db.Model):
       data_source = db.Column(String(100) ..)
       field1 = ...
       field2 = ...