test_dialect.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from .. import fixtures, config
  2. from ..config import requirements
  3. from sqlalchemy import exc
  4. from sqlalchemy import Integer, String
  5. from .. import assert_raises
  6. from ..schema import Table, Column
  7. class ExceptionTest(fixtures.TablesTest):
  8. """Test basic exception wrapping.
  9. DBAPIs vary a lot in exception behavior so to actually anticipate
  10. specific exceptions from real round trips, we need to be conservative.
  11. """
  12. run_deletes = 'each'
  13. __backend__ = True
  14. @classmethod
  15. def define_tables(cls, metadata):
  16. Table('manual_pk', metadata,
  17. Column('id', Integer, primary_key=True, autoincrement=False),
  18. Column('data', String(50))
  19. )
  20. @requirements.duplicate_key_raises_integrity_error
  21. def test_integrity_error(self):
  22. with config.db.begin() as conn:
  23. conn.execute(
  24. self.tables.manual_pk.insert(),
  25. {'id': 1, 'data': 'd1'}
  26. )
  27. assert_raises(
  28. exc.IntegrityError,
  29. conn.execute,
  30. self.tables.manual_pk.insert(),
  31. {'id': 1, 'data': 'd1'}
  32. )