尽管我可能会尝试,但我似乎不能正确地捕获sqlalchemy IntegrityError:
from sqlalchemy import exc
try:
insert_record()
except exc.IntegrityError, exc:
print exc # this is never called
handle_elegantly() # this is never called
正如人们可能预期的那样:
IntegrityError: (IntegrityError) insert or update on table "my_table
我正在研究一个关于使用try/except块捕获SQLAlchemy内核中的异常的书籍示例:
from sqlalchemy.exc import IntegrityError
ins = insert(users).values(
username="cookiemon", #This username is already in db,
email_address="damon@cookie.com", should throw an IntegrityError
phone="111-111-111
这是设置
class A(Model):
pass
class B(Model):
a = ForeignKey(A, on_delete=CASCADE)
assert A.objects.all().count() == 0
try:
B.object.create(a_id=1)
except IntegrityError:
print('error')
# ... another logic to deal with situation
DB是PostgreSQL。目前还没有A对象(至少使用id=1)。
我尝试使用从第三方获
谁能给我解释一下如何正确测试Postgres DB错误,特别是IntegrityError。例如,我有下一个测试:
class TestSlugs(TestCase):
# This slug must be unique
b = BookPublisher(slug=self.duplicate_slug)
self.assertRaises(IntegrityError, b.save)
#check if there's only one BookPublisher
self.assertEquals(BookPublisher.obje
这是我第一次玩SQLAlchemy,我只是想把一个项目插入到一个表格中,然后让flask把它打印出来。然而,当我没有捕捉到异常时,我总是收到像这样的完整性错误:
sqlalchemy.exc.IntegrityError: (IntegrityError) column email is not unique u'INSERT INTO user (username, email) VALUES (?, ?)' ('test', 'test@gmail.com')
我有以下代码:
from flask import Flask
from flas
我希望正确地处理事务执行时可能引发的IntegrityError异常,乍一看,我看到了实现这一异常的两种方法,但不确定两者是否正确,有人能澄清两者是否正确,以及为什么?
注意事项:我在使用PostgreSQL
# alternative one
try:
with transaction.commit_on_success():
# db operation 1
# db operation 2
except IntegrityError:
transaction.rollback()
#alternative two
with transaction.commi
我有以下视图(除POST请求外),并序列化对象数据( Draftschedule)以创建新副本( FrozenSchedule):
from reports.tasks import create_frozen_schedule
def freeze_schedule(request, pk):
"""Valid post request will freeze a Draft Schedule serializing its data"""
client = get_object_or_404(Client, draftsch
我正在尝试运行以下Django单元:
class MyModelTests(TestCase):
def test_failed_duplicate(self):
m = MyModel.objects.create(a='a', b='a')
with self.assertRaises(IntegrityError):
MyModel.objects.create(a='a', b='b')
with self.assertRaises(Integ
在我的django模型中,我在PostgresSql中使用了以下内容
class Business(models.Model):
location = models.CharField(max_length=200,default="")
name = models.CharField(max_length=200,default="",unique=True)
在我看来,我有:
for b in bs:
try:
p = Business(**b)
p.save()
except Integri
我使用通过API调用创建用户(请参阅下面的api.py )。任何错误都会触发与您看到的相同的except IntegrityError。我希望我的模型将正确的错误消息返回给用户。请参见下面的模型管理器,当电子邮件为空白时,错误“指定的电子邮件必须设置”应该作为IntegrityError错误返回给用户。
我该怎么做?
api.py
class CreateResource(ModelResource):
"""
API Facet that creates and returns a new user with self.user_email
a
从IntegrityError中恢复的正确方法是什么,或者任何其他错误,这些错误可能会使我的事务在不使用手动事务控制的情况下被搞砸?
在我的应用程序中,我遇到了IntegrityError的问题,我想要从中恢复,这会使以后的数据库活动变得一团糟,留给我的是:
DatabaseError: current transaction is aborted, commands ignored until end of transaction block`
对于忽略IntegrityErrors之后的所有数据库活动。
这段代码应该会重现我看到的错误
from django.db import tran
下面的静态方法(取自)是一种用假数据填充数据库的方法,我希望将它导入Django。
models.py
class User(UserMixin, db.Model):
# ......
@staticmethod
def generate_fake(count=100):
from sqlalchemy.exc import IntegrityError
from random import seed
import forgery_py
seed()
for i in ran
起初,我认为尽可能具体是最好的方法:
from django.db import IntegrityError
from psycopg2.errorcodes import UNIQUE_VIOLATION
try:
m = Model.objects.create(value=m2.old_value)
except IntegrityError as e:
if e.__cause__.pgcode != UNIQUE_VIOLATION:
raise
m = Model.objects.get(value=m2.old_value)
然而,后来
我在我的模型中定义了一个唯一的约束:
class FooBar(models.Model):
_name = 'my.foobar'
# ...
_sql_constraints = [
('foo_bar_uniq', 'unique("foo", "bar")', 'You could not step twice into the same foobar!')
]
以及具有用于创建新对象的代码的控制器:
class FooBarControl