我有一些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) 我正在编写一些帐户创建代码并尝试捕获特定的 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)