- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一些帐户创建代码并 try catch 特定的 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)
代码的主要部分如下所示:
@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 already in use!'
例如,如果我在一些 json 中发布:
{
"userId": "Fred",
"email": "a@b.com"
}
然后使用不同的用户 ID 但相同的电子邮件再次发布:
{
"userId": "Bob",
"email": "a@b.com"
}
我希望第二篇文章引发 IntegrityError 但我看到它引发了 ProgrammingError:
sqlalchemy.exc.ProgrammingError: (pg8000.core.ProgrammingError)
('ERROR',
'23505',
'duplicate key value violates unique constraint "idx_email"',
'Key (email)=(a@b.com) already exists.',
'public',
'user_profile',
'idx_email',
'nbtinsert.c',
'406',
'_bt_check_unique', '', '')
[SQL: 'INSERT INTO user_profile (user_id, email) VALUES (%s, %s)']
[parameters: ('Bob', 'a@b.com')]
我错过了什么?
最佳答案
不幸的是,当涉及到 DBAPI 时errors SQLAlchemy 仅包装由底层 dbapi 兼容库引发的异常。
也就是说,SQLAlchemy 引发了一个ProgrammingError
,特别是因为pg8000
选择引发一个ProgrammingError
。
如果您一直在使用 psycopg2
来管理您的底层连接,您的错误将表现为 IntegrityError
(正如预期的那样)。
根据pg8000
documentation ,它永远不会引发 IntegrityError
。事实上,它不会引发以下任何情况:
这里的教训是,当涉及到数据库级错误时,您无法保证 SQLAlchemy 将在不同的 dbapi 连接器上抛出的类型。
关于python - 为什么我得到的是 sqlalchemy.exc.ProgrammingError 而不是 sqlalchemy.exc.IntegrityError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39156330/
我正在编写一些帐户创建代码并 try catch 特定的 sqlalchemy 异常,以便当用户使用已关联到现有帐户的电子邮件注册帐户时,我可以反馈适当的错误消息。 发生这种情况时,我原以为会得到一个
我创建了这个适用于 vector 、链表和双链表的函数。该函数获取一个值并在容器中搜索它。如果 vlaue 在容器中,则该函数会将值插入到已存在的位置旁边。因此,如果 val=2,则 {3,2,5}
我不断收到错误访问错误,我认为这与我的 UIPickerView 有关,因为这是应用程序崩溃的时候。一切正常,直到我从 UIPickerView 中做出第九个选择。每次应用程序在第 9 个选择时崩溃。
我在使用 swift 2 的最新版本的 xcode 中遇到此错误 上线 let s = linkTxt.text linkTxt 中的文本通过按钮“pasteFromClipBoard”显示 let
我有一个 Massive View Controller 并试图将我的代码分成不同的类。我创建了一个类 CurrentLocation。在 View Controller 中,我调用了 google
我正在使用 sqlacodegen 从我的数据库中反射(reflect)一堆表。我收到以下错误: sqlalchemy.exc.AmbiguousForeignKeysError: Can't det
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
好吧,我对 ASP.NET 和 MasterPage 概念还很陌生,有一个我无法弄清楚的错误。 这是我的 default.aspx 的一部分: You've got credits.
本文整理了Java中com.ctc.wstx.exc.WstxException类的一些代码示例,展示了WstxException类的具体用法。这些代码示例主要来源于Github/Stackoverf
我在模拟器中遇到了问题。模拟器偶尔会停止并显示 程序收到信号:“EXC_BAD_ACCESS”。 作为控制台输出。没有提供更多信息。有机会更接近问题吗? 最佳答案 我看到 NSZombie 已经被提议
我很可能在这里缺少一些基本概念,但我尝试创建一些类似简单的代码审查应用程序的东西,并在设计数据库架构时尝试遵循此文档: http://flask-sqlalchemy.pocoo.org/2.1/mo
这种情况只是偶尔发生一次。当我从菜单项调用的方法中的断点单步执行时,按下时我最终到达方法的末尾,当我单步执行时,我最终到达 ccTouchEnded,然后发生错误访问。调试输出窗口中没有显示任何内容,
我在获取随机人变量的生日或电子邮件时遇到 EXC_BAD_ACCESS 问题。我尝试使用以下代码,但当我使用 dispatch_async 运行它时失败了。 ABAddressBook address
我收到此错误: >>> br = Browser() >>> br.open("http://www.bestforumz.com/forum/") >> >>> br.select_form(nr=
我开始使用 DeviceMotion 类进行编码。遵循 Apple 的文档后,我有以下内容: - (void)viewDidLoad { [super viewDidLoad]; my
我正在学习 Pyramid 教程:http://pyramid-blogr.readthedocs.io/en/latest/project_structure.html并使用 Windows 8。
我正在 try catch mysql/sqlalchemy OperationalErrors 并替换 handle access denied (1045) 与 connection refuse
为什么我会得到 TraceBack sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between pare
过去 3 天我一直在为这个错误而苦苦挣扎,但没有成功。我正在开发一个包含 uiviewcontrollers 和 uitableviewcontrollers 的组合应用程序,在表格 View 中我单
给定以下 python 代码: import git try: raise git.exc.GitCommandError("dummy", "foo") except git.exc.Git
我是一名优秀的程序员,十分优秀!