Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何组织SQLAlchemy关系以进行类似JSON的dict的访问?_Python_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 我如何组织SQLAlchemy关系以进行类似JSON的dict的访问?

Python 我如何组织SQLAlchemy关系以进行类似JSON的dict的访问?,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我有一个应用程序,每个用户可以有许多不同的衣服尺寸与他们的帐户。我用关联表对这些关联进行了建模,并通过模型中的relationship()s将它们链接起来。在我开始尝试将这些关系放入字典之前,它们是在顶层链接的,如下所示: class User(db.Model): id = db.Column(db.Integer, primary_key=True) # user many-to-many size associations (using link tables)

我有一个应用程序,每个用户可以有许多不同的衣服尺寸与他们的帐户。我用关联表对这些关联进行了建模,并通过模型中的
relationship()
s将它们链接起来。在我开始尝试将这些关系放入字典之前,它们是在顶层链接的,如下所示:

class User(db.Model):

    id = db.Column(db.Integer, primary_key=True)

    # user many-to-many size associations (using link tables)
    sz_shirt_dress_sleeve = db.relationship(
        'SizeKeyShirtDressSleeve',
        secondary=LinkUserSizeShirtDressSleeve,
        backref=db.backref('users', lazy='dynamic'))
    sz_shirt_dress_neck = db.relationship(
        'SizeKeyShirtDressNeck',
        secondary=LinkUserSizeShirtDressNeck,
        backref=db.backref('users', lazy='dynamic'))
    sz_shirt_casual = db.relationship(
        'SizeKeyShirtCasual',
        secondary=LinkUserSizeShirtCasual,
        backref=db.backref('users', lazy='dynamic'))
我可以这样访问它们:

>>> from app.models import User
>>> u1 = User.query.first()
>>> u1.sz_shirt_dress_sleeve
[Dress shirt sleeve size: 3000]
因为我最终会有20个这样的关系,并且因为我想在其他地方以更编程的方式访问它们,所以我想将它们存储在一个类似JSON的dict中,如下所示:

class User(db.Model):

    id = db.Column(db.Integer, primary_key=True)

    sizes = {
        'shirt-sleeve': {
            'key': 'shirt-sleeve',
            'values': db.relationship(
                'SizeKeyShirtDressSleeve',
                secondary=LinkUserSizeShirtDressSleeve,
                backref=db.backref('users', lazy='dynamic'))
        }
    }
>>> <some_user>.sizes['shirt-sleeve']['values']
[3000, 3050, 3100]
通过这样做,我可以访问如下尺寸列表:

class User(db.Model):

    id = db.Column(db.Integer, primary_key=True)

    sizes = {
        'shirt-sleeve': {
            'key': 'shirt-sleeve',
            'values': db.relationship(
                'SizeKeyShirtDressSleeve',
                secondary=LinkUserSizeShirtDressSleeve,
                backref=db.backref('users', lazy='dynamic'))
        }
    }
>>> <some_user>.sizes['shirt-sleeve']['values']
[3000, 3050, 3100]
这不起作用(尽管也没有错误):

>>从app.models导入用户
>>>u1=User.query.first()
>>>u1.尺寸['衬衫领]['数值']

如何将这些关系存储在类似JSON的字典中?(还有一个小问题:如果我应该这样做,我在哪里可以学习设计原则来教我呢?我是自学的,这些更大的设计概念在文档/教程中并没有真正涵盖)

在模型上定义一种方法,修改
用户
对象,然后返回它:

class User(db.Model):
    # your codes...
    def as_dict(self):
        self.sizes = {
            'shirt-neck': {
                'key': 'shirt-neck',
                'values': self.sz_shirt_dress_neck
            },
            # another one
        }
        return self


>>> u1 = User.query.first()
>>> if u1:
...     user = u1.as_dict()
...     user.sizes

类名似乎包含数据,我猜您的表也会这样。这通常有点反模式。与单独的尺码表(衬衫(连衣裙(领子|袖子)|休闲装)不同,有一个表描述不同种类物品的尺码。然后,以编程方式生成各种过滤集是一件轻而易举的事情。下面是一些关于你应该避免的事情的幻灯片:我想我明白了。你是说每个类别的所有可能尺寸都在同一张表中?大小的值可以采用不同的格式。例如:
id |衣服|猫|子|特定|值| 1 |衬衫|袖子| 3100 |998 |夹克|长度| L'\999 |鞋|长度| 10 \…
\etc?我肯定知道如何使用好的查询,根据需要从该表中进行切分和查询。