使用flask-sqlalchemy pickletype

时间:2017-12-19 18:56:53

标签: python flask flask-sqlalchemy

我的数据看起来像这样:

projects = [
    {
        'title': 'Project A',
        'point_of_contact': {'name': 'Johnny', 'org': 'Box'},
        'overrides': [4, 7, 99, 42],
        'tier_mapping': {1: 2000, 2: 4000, 3: 8000, 4: 12000},
        'milestones': [{'year': 2014, 'achievement': 'Model development'}, {'year': 2014, 'achievement': 'Model approved by board'}]
    },
    {
        'title': 'Project B',
        ...
    }

正如你所知,没有明显的结构。我想将此添加到我的sql支持的烧瓶Web应用程序中。最简单的选择是使用flask-sqlalchemy创建一个表:

class Project(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    data = db.Column(db.PickleType)

另一种选择是为每个迭代项创建一个表,并将其映射到各自的Project。例如,在项目及其覆盖之间创建关系可能如下所示:

class Project(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50))
    overrides = db.relationship('Override', backref='mapped_project', lazy='dynamic')

class Override(dn.Model):
    id = db.Column(db.Integer, primary_key=True)
    override = db.Column(db.Integer)
    project_id = db.Column(db.Integer, db.ForeignKey('project.id'))

我的问题是以下数据库模型中哪一个“更好”?有没有使用第一个模型(性能等),这显然更容易设置。我想唯一的骗局是泡菜类型不清楚我们存储的是什么。

请注意,此Web应用程序每个月都在增长,所以我更喜欢灵活的数据库模型。我知道MongoDB可能是更好的选择,但所有内容都已经用SQL编写,我不想重写整个应用程序。

0 个答案:

没有答案