小编spa*_*erj的帖子

如何在postgres json列中查询嵌套数组?

我有一些json类似于下面存储在postgres json列中的json.我正在尝试查询它以识别一些错误输入的数据.我基本上都在寻找房屋描述与房屋号码相同的地址.我无法理解如何做到这一点.

{
  "timestamp": "2014-10-23T16:15:28+01:00",
  "schools": [
    {
    "school_id": "1",
    "addresses": [
      {
        "town": "Birmingham",
        "house_description": "1",
        "street_name": "Parklands",
        "addr_id": "4",
        "postcode": "B5 8KL",
        "house_no": "1",
        "address_type": "UK"
      },
      {
        "town": "Plymouth",
        "house_description": "Flat a",
        "street_name": "Fore Street",
        "addr_id": "2",
        "postcode": "PL9 8AY",
        "house_no": "15",
        "address_type": "UK"
      }
    ]
  },
  {
    "school_id": "2",
    "addresses": [
      {
        "town": "Coventry",
        "street_name": "Shipley Way",
        "addr_id": "19",
        "postcode": "CV8 3DL",
        "house_no": "662",
        "address_type": "UK"
      }
    ]
  }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我写了这个sql,它将找到数据匹配的位置:

select *
FROM title_register_data …
Run Code Online (Sandbox Code Playgroud)

sql arrays postgresql json nested

6
推荐指数
1
解决办法
6610
查看次数

为什么我收到 sqlalchemy.exc.ProgrammingError 而不是 sqlalchemy.exc.IntegrityError?

我正在编写一些帐户创建代码并尝试捕获特定的 sqlalchemy 异常,以便当用户使用已关联到现有帐户的电子邮件注册帐户时,我可以反馈适当的错误消息。

发生这种情况时,我希望得到一个 IntegrityError,但我却得到了一个 ProgrammingError。我可以愉快地捕捉到 ProgrammingError 但我试图理解为什么我没有得到我所期望的。

为清楚起见,我已经减少了模型和代码,但模型看起来像:

from service import db
from sqlalchemy import Index

class UserProfile(db.Model):
user_id = db.Column(db.String(255), nullable=False, primary_key=True)
email = db.Column(db.String(255), nullable=False)

def __init__(self, account_data):
    self.user_id = account_data['userId']
    self.email = account_data['email'].lower()

def __repr__(self):
    return 'UserID-{}, Email-{}'.format(self.user_id,self.email)                                                                            

Index('idx_email', UserProfile.email, unique=True)
Run Code Online (Sandbox Code Playgroud)

代码的主要部分如下所示:

@app.route('/create_account', methods=['POST'])
def create_account():

account_data = request.get_json()

account_details = UserProfile(account_data)
try:
    db.session.add(account_details)
    db.session.flush()

    # do stuff

    db.session.commit()

except ProgrammingError as err:
    db.session.rollback()
    if "duplicate key value violates unique constraint \"idx_email\"" in str(err):
        LOGGER.error('Email address …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

4
推荐指数
1
解决办法
1107
查看次数

标签 统计

arrays ×1

json ×1

nested ×1

postgresql ×1

python ×1

sql ×1

sqlalchemy ×1