← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~jugmac00/launchpad:sqlobject-is-a-first-party-import into launchpad:master

 

Jürgen Gmach has proposed merging ~jugmac00/launchpad:sqlobject-is-a-first-party-import into launchpad:master.

Commit message:
Move the SQLObject wrapper into the lp namespace

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~jugmac00/launchpad/+git/launchpad/+merge/410928
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~jugmac00/launchpad:sqlobject-is-a-first-party-import into launchpad:master.
diff --git a/lib/lp/answers/model/answercontact.py b/lib/lp/answers/model/answercontact.py
index dac75e7..92ac08b 100644
--- a/lib/lp/answers/model/answercontact.py
+++ b/lib/lp/answers/model/answercontact.py
@@ -6,12 +6,12 @@
 __all__ = ['AnswerContact']
 
 
-from sqlobject import ForeignKey
 from zope.interface import implementer
 
 from lp.answers.interfaces.answercontact import IAnswerContact
 from lp.registry.interfaces.person import validate_public_person
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import ForeignKey
 
 
 @implementer(IAnswerContact)
diff --git a/lib/lp/answers/vocabulary.py b/lib/lp/answers/vocabulary.py
index e60e2cf..707c7cc 100644
--- a/lib/lp/answers/vocabulary.py
+++ b/lib/lp/answers/vocabulary.py
@@ -9,7 +9,6 @@ __all__ = [
     'UsesAnswersProductVocabulary',
     ]
 
-from sqlobject import OR
 from storm.expr import And
 from zope.interface import implementer
 from zope.schema.vocabulary import SimpleTerm
@@ -22,6 +21,7 @@ from lp.registry.vocabularies import (
     DistributionVocabulary,
     ProductVocabulary,
     )
+from lp.services.sqlobject import OR
 from lp.services.webapp.vocabulary import (
     CountableIterator,
     FilteredVocabularyBase,
diff --git a/lib/lp/archiveuploader/uploadprocessor.py b/lib/lp/archiveuploader/uploadprocessor.py
index 2081a51..9ba00ec 100644
--- a/lib/lp/archiveuploader/uploadprocessor.py
+++ b/lib/lp/archiveuploader/uploadprocessor.py
@@ -49,7 +49,6 @@ import os
 import shutil
 import sys
 
-from sqlobject import SQLObjectNotFound
 from zope.component import getUtility
 
 from lp.app.errors import NotFoundError
@@ -76,6 +75,7 @@ from lp.oci.interfaces.ocirecipebuild import IOCIRecipeBuild
 from lp.registry.interfaces.distribution import IDistributionSet
 from lp.registry.interfaces.person import IPersonSet
 from lp.services.log.logger import BufferLogger
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.webapp.errorlog import (
     ErrorReportingUtility,
     ScriptRequest,
diff --git a/lib/lp/blueprints/model/specification.py b/lib/lp/blueprints/model/specification.py
index 034a7c3..d738647 100644
--- a/lib/lp/blueprints/model/specification.py
+++ b/lib/lp/blueprints/model/specification.py
@@ -15,14 +15,6 @@ import operator
 from lazr.lifecycle.event import ObjectCreatedEvent
 from lazr.lifecycle.objectdelta import ObjectDelta
 import six
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    IntCol,
-    SQLMultipleJoin,
-    SQLRelatedJoin,
-    StringCol,
-    )
 from storm.locals import (
     Count,
     Desc,
@@ -106,6 +98,14 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    IntCol,
+    SQLMultipleJoin,
+    SQLRelatedJoin,
+    StringCol,
+    )
 from lp.services.webapp.interfaces import ILaunchBag
 from lp.services.webapp.snapshot import notify_modified
 from lp.services.xref.interfaces import IXRefSet
diff --git a/lib/lp/blueprints/model/specificationdependency.py b/lib/lp/blueprints/model/specificationdependency.py
index 900c123..6729a67 100644
--- a/lib/lp/blueprints/model/specificationdependency.py
+++ b/lib/lp/blueprints/model/specificationdependency.py
@@ -3,13 +3,13 @@
 
 __all__ = ['SpecificationDependency']
 
-from sqlobject import ForeignKey
 from zope.interface import implementer
 
 from lp.blueprints.interfaces.specificationdependency import (
     ISpecificationDependency,
     )
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import ForeignKey
 
 
 @implementer(ISpecificationDependency)
diff --git a/lib/lp/blueprints/model/specificationmessage.py b/lib/lp/blueprints/model/specificationmessage.py
index c4b8b61..38b359a 100644
--- a/lib/lp/blueprints/model/specificationmessage.py
+++ b/lib/lp/blueprints/model/specificationmessage.py
@@ -8,10 +8,6 @@ __all__ = [
 
 from email.utils import make_msgid
 
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    )
 from zope.interface import implementer
 
 from lp.blueprints.interfaces.specificationmessage import (
@@ -23,6 +19,10 @@ from lp.services.messages.model.message import (
     Message,
     MessageChunk,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    )
 
 
 @implementer(ISpecificationMessage)
diff --git a/lib/lp/bugs/model/bug.py b/lib/lp/bugs/model/bug.py
index 94f4dfc..a9fe305 100644
--- a/lib/lp/bugs/model/bug.py
+++ b/lib/lp/bugs/model/bug.py
@@ -32,14 +32,6 @@ from six.moves.collections_abc import (
     Iterable,
     Set,
     )
-from sqlobject import (
-    ForeignKey,
-    IntCol,
-    SQLMultipleJoin,
-    SQLObjectNotFound,
-    SQLRelatedJoin,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Coalesce,
@@ -229,6 +221,14 @@ from lp.services.propertycache import (
     clear_property_cache,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    ForeignKey,
+    IntCol,
+    SQLMultipleJoin,
+    SQLObjectNotFound,
+    SQLRelatedJoin,
+    StringCol,
+    )
 from lp.services.webapp.authorization import check_permission
 from lp.services.webapp.interfaces import ILaunchBag
 from lp.services.webapp.publisher import (
diff --git a/lib/lp/bugs/model/bugactivity.py b/lib/lp/bugs/model/bugactivity.py
index ec51800..b0875ba 100644
--- a/lib/lp/bugs/model/bugactivity.py
+++ b/lib/lp/bugs/model/bugactivity.py
@@ -5,10 +5,6 @@ __all__ = ['BugActivity', 'BugActivitySet']
 
 import re
 
-from sqlobject import (
-    ForeignKey,
-    StringCol,
-    )
 from storm.store import Store
 from zope.interface import implementer
 
@@ -35,6 +31,10 @@ from lp.bugs.interfaces.bugactivity import (
 from lp.registry.interfaces.person import validate_person
 from lp.services.database.datetimecol import UtcDateTimeCol
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import (
+    ForeignKey,
+    StringCol,
+    )
 
 
 @implementer(IBugActivity)
diff --git a/lib/lp/bugs/model/bugattachment.py b/lib/lp/bugs/model/bugattachment.py
index 44dc0e9..c77ee03 100644
--- a/lib/lp/bugs/model/bugattachment.py
+++ b/lib/lp/bugs/model/bugattachment.py
@@ -7,11 +7,6 @@ from lazr.lifecycle.event import (
     ObjectCreatedEvent,
     ObjectDeletedEvent,
     )
-from sqlobject import (
-    ForeignKey,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.store import Store
 from zope.event import notify
 from zope.interface import implementer
@@ -25,6 +20,11 @@ from lp.bugs.interfaces.bugattachment import (
 from lp.services.database.enumcol import EnumCol
 from lp.services.database.sqlbase import SQLBase
 from lp.services.propertycache import cachedproperty
+from lp.services.sqlobject import (
+    ForeignKey,
+    SQLObjectNotFound,
+    StringCol,
+    )
 
 
 @implementer(IBugAttachment)
diff --git a/lib/lp/bugs/model/bugtracker.py b/lib/lp/bugs/model/bugtracker.py
index b13b90c..037f80a 100644
--- a/lib/lp/bugs/model/bugtracker.py
+++ b/lib/lp/bugs/model/bugtracker.py
@@ -21,14 +21,6 @@ from six.moves.urllib.parse import (
     urlsplit,
     urlunsplit,
     )
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    OR,
-    SQLMultipleJoin,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.expr import (
     Count,
     Desc,
@@ -82,6 +74,14 @@ from lp.services.database.sqlbase import (
     )
 from lp.services.database.stormbase import StormBase
 from lp.services.helpers import shortlist
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    OR,
+    SQLMultipleJoin,
+    SQLObjectNotFound,
+    StringCol,
+    )
 
 
 def base_url_permutations(base_url):
diff --git a/lib/lp/bugs/model/bugwatch.py b/lib/lp/bugs/model/bugwatch.py
index 5dd88e5..664a252 100644
--- a/lib/lp/bugs/model/bugwatch.py
+++ b/lib/lp/bugs/model/bugwatch.py
@@ -20,11 +20,6 @@ from six.moves.urllib.parse import (
     splitvalue,
     urlunsplit,
     )
-from sqlobject import (
-    ForeignKey,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.expr import (
     Desc,
     Not,
@@ -71,6 +66,11 @@ from lp.services.database.sqlbase import SQLBase
 from lp.services.database.stormbase import StormBase
 from lp.services.helpers import shortlist
 from lp.services.messages.model.message import Message
+from lp.services.sqlobject import (
+    ForeignKey,
+    SQLObjectNotFound,
+    StringCol,
+    )
 from lp.services.webapp import (
     urlappend,
     urlsplit,
diff --git a/lib/lp/bugs/vocabularies.py b/lib/lp/bugs/vocabularies.py
index 95d1954..667a6d9 100644
--- a/lib/lp/bugs/vocabularies.py
+++ b/lib/lp/bugs/vocabularies.py
@@ -18,10 +18,6 @@ __all__ = [
     'WebBugTrackerVocabulary',
     ]
 
-from sqlobject import (
-    CONTAINSSTRING,
-    OR,
-    )
 from storm.expr import (
     And,
     Or,
@@ -65,6 +61,10 @@ from lp.registry.model.productseries import ProductSeries
 from lp.registry.vocabularies import DistributionVocabulary
 from lp.services.database.interfaces import IStore
 from lp.services.helpers import shortlist
+from lp.services.sqlobject import (
+    CONTAINSSTRING,
+    OR,
+    )
 from lp.services.webapp.escaping import (
     html_escape,
     structured,
diff --git a/lib/lp/buildmaster/model/processor.py b/lib/lp/buildmaster/model/processor.py
index 68d9581..d56128b 100644
--- a/lib/lp/buildmaster/model/processor.py
+++ b/lib/lp/buildmaster/model/processor.py
@@ -6,7 +6,6 @@ __all__ = [
     'ProcessorSet',
     ]
 
-from sqlobject import StringCol
 from storm.locals import Bool
 from zope.interface import implementer
 
@@ -17,6 +16,7 @@ from lp.buildmaster.interfaces.processor import (
     )
 from lp.services.database.interfaces import IStore
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import StringCol
 
 
 @implementer(IProcessor)
diff --git a/lib/lp/code/mail/codehandler.py b/lib/lp/code/mail/codehandler.py
index f149d8b..2c32076 100644
--- a/lib/lp/code/mail/codehandler.py
+++ b/lib/lp/code/mail/codehandler.py
@@ -5,7 +5,6 @@ import operator
 import os
 import re
 
-from sqlobject import SQLObjectNotFound
 import transaction
 from zope.component import getUtility
 from zope.interface import implementer
@@ -35,6 +34,7 @@ from lp.services.mail.interfaces import (
 from lp.services.mail.notification import send_process_error_notification
 from lp.services.mail.sendmail import simple_sendmail
 from lp.services.messages.interfaces.message import IMessageSet
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.webapp.interfaces import ILaunchBag
 
 
diff --git a/lib/lp/code/model/branch.py b/lib/lp/code/model/branch.py
index f0dd019..a41ce08 100644
--- a/lib/lp/code/model/branch.py
+++ b/lib/lp/code/model/branch.py
@@ -20,11 +20,6 @@ from lazr.lifecycle.event import ObjectCreatedEvent
 import pytz
 import six
 from six.moves.urllib_parse import urlsplit
-from sqlobject import (
-    ForeignKey,
-    IntCol,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Coalesce,
@@ -194,6 +189,11 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    ForeignKey,
+    IntCol,
+    StringCol,
+    )
 from lp.services.webapp import urlappend
 from lp.services.webapp.authorization import check_permission
 from lp.services.webapp.interfaces import ILaunchBag
diff --git a/lib/lp/code/model/branchlookup.py b/lib/lp/code/model/branchlookup.py
index b63d2eb..f3e1549 100644
--- a/lib/lp/code/model/branchlookup.py
+++ b/lib/lp/code/model/branchlookup.py
@@ -14,7 +14,6 @@ from lazr.uri import (
     InvalidURIError,
     URI,
     )
-from sqlobject import SQLObjectNotFound
 from storm.expr import (
     And,
     Join,
@@ -68,6 +67,7 @@ from lp.registry.model.product import Product
 from lp.registry.model.sourcepackagename import SourcePackageName
 from lp.services.config import config
 from lp.services.database.interfaces import IStore
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.webapp.authorization import check_permission
 
 
diff --git a/lib/lp/code/model/branchmergeproposal.py b/lib/lp/code/model/branchmergeproposal.py
index 3755b55..dd2c122 100644
--- a/lib/lp/code/model/branchmergeproposal.py
+++ b/lib/lp/code/model/branchmergeproposal.py
@@ -19,11 +19,6 @@ from lazr.lifecycle.event import (
     ObjectDeletedEvent,
     )
 import six
-from sqlobject import (
-    ForeignKey,
-    IntCol,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Desc,
@@ -135,6 +130,11 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    ForeignKey,
+    IntCol,
+    StringCol,
+    )
 from lp.services.webapp.errorlog import ScriptRequest
 from lp.services.xref.interfaces import IXRefSet
 from lp.soyuz.enums import (
diff --git a/lib/lp/code/model/branchmergeproposaljob.py b/lib/lp/code/model/branchmergeproposaljob.py
index 0430cb8..a74774d 100644
--- a/lib/lp/code/model/branchmergeproposaljob.py
+++ b/lib/lp/code/model/branchmergeproposaljob.py
@@ -33,7 +33,6 @@ from lazr.enum import (
 import pytz
 import simplejson
 import six
-from sqlobject import SQLObjectNotFound
 from storm.expr import (
     And,
     Desc,
@@ -99,6 +98,7 @@ from lp.services.job.runner import (
     BaseRunnableJobSource,
     )
 from lp.services.mail.sendmail import format_address_for_person
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.webapp import canonical_url
 
 
diff --git a/lib/lp/code/model/diff.py b/lib/lp/code/model/diff.py
index 6041c26..aa0b738 100644
--- a/lib/lp/code/model/diff.py
+++ b/lib/lp/code/model/diff.py
@@ -26,11 +26,6 @@ from breezy.plugins.difftacular.generate_diff import diff_ignore_branches
 from lazr.delegates import delegate_to
 import simplejson
 import six
-from sqlobject import (
-    ForeignKey,
-    IntCol,
-    StringCol,
-    )
 from storm.locals import (
     Int,
     Reference,
@@ -58,6 +53,11 @@ from lp.services.librarian.interfaces.client import (
     LIBRARIAN_SERVER_DEFAULT_TIMEOUT,
     )
 from lp.services.propertycache import get_property_cache
+from lp.services.sqlobject import (
+    ForeignKey,
+    IntCol,
+    StringCol,
+    )
 from lp.services.timeout import (
     get_default_timeout_function,
     reduced_timeout,
diff --git a/lib/lp/code/model/revision.py b/lib/lp/code/model/revision.py
index 27a292e..e5c8413 100644
--- a/lib/lp/code/model/revision.py
+++ b/lib/lp/code/model/revision.py
@@ -18,13 +18,6 @@ import email
 from breezy.revision import NULL_REVISION
 import pytz
 import six
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    IntCol,
-    SQLMultipleJoin,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Asc,
@@ -76,6 +69,13 @@ from lp.services.identity.interfaces.emailaddress import (
     EmailAddressStatus,
     IEmailAddressSet,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    IntCol,
+    SQLMultipleJoin,
+    StringCol,
+    )
 
 
 @implementer(IRevision)
diff --git a/lib/lp/code/model/tests/test_branch.py b/lib/lp/code/model/tests/test_branch.py
index b3bc7de..a39b473 100644
--- a/lib/lp/code/model/tests/test_branch.py
+++ b/lib/lp/code/model/tests/test_branch.py
@@ -15,7 +15,6 @@ from breezy.revision import NULL_REVISION
 from breezy.url_policy_open import BadUrl
 from pytz import UTC
 import six
-from sqlobject import SQLObjectNotFound
 from storm.exceptions import LostObjectError
 from storm.locals import Store
 from testtools import ExpectedException
@@ -142,6 +141,7 @@ from lp.services.job.tests import (
 from lp.services.memcache.interfaces import IMemcacheClient
 from lp.services.osutils import override_environ
 from lp.services.propertycache import clear_property_cache
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.webapp.authorization import check_permission
 from lp.services.webapp.interfaces import (
     IOpenLaunchBag,
diff --git a/lib/lp/code/model/tests/test_branchmergeproposal.py b/lib/lp/code/model/tests/test_branchmergeproposal.py
index fcb6083..a523e37 100644
--- a/lib/lp/code/model/tests/test_branchmergeproposal.py
+++ b/lib/lp/code/model/tests/test_branchmergeproposal.py
@@ -16,7 +16,6 @@ from lazr.lifecycle.event import ObjectCreatedEvent
 from lazr.restfulclient.errors import BadRequest
 from pytz import UTC
 import six
-from sqlobject import SQLObjectNotFound
 from storm.locals import Store
 from testscenarios import (
     load_tests_apply_scenarios,
@@ -85,6 +84,7 @@ from lp.services.config import config
 from lp.services.database.constants import UTC_NOW
 from lp.services.features.testing import FeatureFixture
 from lp.services.job.interfaces.job import JobStatus
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.webapp import canonical_url
 from lp.services.webhooks.testing import LogsScheduledWebhooks
 from lp.services.xref.interfaces import IXRefSet
diff --git a/lib/lp/code/model/tests/test_branchmergeproposaljobs.py b/lib/lp/code/model/tests/test_branchmergeproposaljobs.py
index 8ea42a1..6528063 100644
--- a/lib/lp/code/model/tests/test_branchmergeproposaljobs.py
+++ b/lib/lp/code/model/tests/test_branchmergeproposaljobs.py
@@ -14,7 +14,6 @@ from lazr.lifecycle.event import ObjectModifiedEvent
 from lazr.lifecycle.interfaces import IObjectModifiedEvent
 import pytz
 import six
-from sqlobject import SQLObjectNotFound
 from storm.locals import Select
 from storm.store import Store
 from testtools.matchers import (
@@ -69,6 +68,7 @@ from lp.services.job.tests import (
     pop_remote_notifications,
     )
 from lp.services.osutils import override_environ
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.webapp import canonical_url
 from lp.services.webhooks.testing import LogsScheduledWebhooks
 from lp.testing import (
diff --git a/lib/lp/code/model/tests/test_gitrepository.py b/lib/lp/code/model/tests/test_gitrepository.py
index a832554..ac89733 100644
--- a/lib/lp/code/model/tests/test_gitrepository.py
+++ b/lib/lp/code/model/tests/test_gitrepository.py
@@ -22,7 +22,6 @@ from lazr.lifecycle.event import ObjectModifiedEvent
 from pymacaroons import Macaroon
 import pytz
 import six
-from sqlobject import SQLObjectNotFound
 from storm.exceptions import LostObjectError
 from storm.store import Store
 from testtools.matchers import (
@@ -163,6 +162,7 @@ from lp.services.macaroons.testing import (
 from lp.services.mail import stub
 from lp.services.openid.model.openididentifier import OpenIdIdentifier
 from lp.services.propertycache import clear_property_cache
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.utils import seconds_since_epoch
 from lp.services.webapp.authorization import check_permission
 from lp.services.webapp.interfaces import OAuthPermission
diff --git a/lib/lp/registry/model/distribution.py b/lib/lp/registry/model/distribution.py
index dada762..69a1cc7 100644
--- a/lib/lp/registry/model/distribution.py
+++ b/lib/lp/registry/model/distribution.py
@@ -13,12 +13,6 @@ import itertools
 from operator import itemgetter
 
 import six
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Desc,
@@ -171,6 +165,12 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    SQLObjectNotFound,
+    StringCol,
+    )
 from lp.services.webapp.url import urlparse
 from lp.services.worlddata.model.country import Country
 from lp.soyuz.enums import (
diff --git a/lib/lp/registry/model/distributionmirror.py b/lib/lp/registry/model/distributionmirror.py
index 71d7c49..4b87ecf 100644
--- a/lib/lp/registry/model/distributionmirror.py
+++ b/lib/lp/registry/model/distributionmirror.py
@@ -19,11 +19,6 @@ from datetime import (
     )
 
 import pytz
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Desc,
@@ -86,6 +81,11 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    StringCol,
+    )
 from lp.services.webapp import (
     canonical_url,
     urlappend,
diff --git a/lib/lp/registry/model/distroseries.py b/lib/lp/registry/model/distroseries.py
index e039e45..e77bca4 100644
--- a/lib/lp/registry/model/distroseries.py
+++ b/lib/lp/registry/model/distroseries.py
@@ -20,15 +20,6 @@ from operator import (
 import apt_pkg
 from lazr.delegates import delegate_to
 import six
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    IntCol,
-    SQLMultipleJoin,
-    SQLObjectNotFound,
-    SQLRelatedJoin,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Column,
@@ -126,6 +117,15 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    IntCol,
+    SQLMultipleJoin,
+    SQLObjectNotFound,
+    SQLRelatedJoin,
+    StringCol,
+    )
 from lp.services.worlddata.model.language import Language
 from lp.soyuz.enums import (
     ArchivePurpose,
diff --git a/lib/lp/registry/model/distroseriesdifference.py b/lib/lp/registry/model/distroseriesdifference.py
index 3b3bef4..6ba74bc 100644
--- a/lib/lp/registry/model/distroseriesdifference.py
+++ b/lib/lp/registry/model/distroseriesdifference.py
@@ -18,7 +18,6 @@ from debian.changelog import (
     )
 from lazr.enum import DBItem
 import six
-from sqlobject import StringCol
 from storm.expr import (
     And,
     Cast,
@@ -83,6 +82,7 @@ from lp.services.propertycache import (
     clear_property_cache,
     get_property_cache,
     )
+from lp.services.sqlobject import StringCol
 from lp.soyuz.enums import (
     ArchivePurpose,
     PackageDiffStatus,
diff --git a/lib/lp/registry/model/gpgkey.py b/lib/lp/registry/model/gpgkey.py
index 236297c..3d0a133 100644
--- a/lib/lp/registry/model/gpgkey.py
+++ b/lib/lp/registry/model/gpgkey.py
@@ -3,12 +3,6 @@
 
 __all__ = ['GPGKey', 'GPGKeySet']
 
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    IntCol,
-    StringCol,
-    )
 from zope.component import getUtility
 from zope.interface import implementer
 
@@ -25,6 +19,12 @@ from lp.services.gpg.interfaces import (
     GPGKeyAlgorithm,
     IGPGHandler,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    IntCol,
+    StringCol,
+    )
 
 
 @implementer(IGPGKey)
diff --git a/lib/lp/registry/model/karma.py b/lib/lp/registry/model/karma.py
index c4d4243..4dd5f0a 100644
--- a/lib/lp/registry/model/karma.py
+++ b/lib/lp/registry/model/karma.py
@@ -13,13 +13,6 @@ __all__ = [
     'KarmaContextMixin',
     ]
 
-from sqlobject import (
-    ForeignKey,
-    IntCol,
-    SQLMultipleJoin,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.expr import Desc
 from zope.interface import implementer
 
@@ -45,6 +38,13 @@ from lp.services.database.sqlbase import (
     SQLBase,
     sqlvalues,
     )
+from lp.services.sqlobject import (
+    ForeignKey,
+    IntCol,
+    SQLMultipleJoin,
+    SQLObjectNotFound,
+    StringCol,
+    )
 
 
 @implementer(IKarmaAssignedEvent)
diff --git a/lib/lp/registry/model/milestone.py b/lib/lp/registry/model/milestone.py
index 2172fb9..5646993 100644
--- a/lib/lp/registry/model/milestone.py
+++ b/lib/lp/registry/model/milestone.py
@@ -17,13 +17,6 @@ from operator import itemgetter
 
 from lazr.restful.declarations import error_status
 from six.moves import http_client
-from sqlobject import (
-    AND,
-    BoolCol,
-    DateCol,
-    ForeignKey,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Desc,
@@ -61,6 +54,13 @@ from lp.services.database.decoratedresultset import DecoratedResultSet
 from lp.services.database.interfaces import IStore
 from lp.services.database.sqlbase import SQLBase
 from lp.services.propertycache import get_property_cache
+from lp.services.sqlobject import (
+    AND,
+    BoolCol,
+    DateCol,
+    ForeignKey,
+    StringCol,
+    )
 from lp.services.webapp.sorting import expand_numbers
 
 
diff --git a/lib/lp/registry/model/packaging.py b/lib/lp/registry/model/packaging.py
index df6c7b6..250bbb7 100644
--- a/lib/lp/registry/model/packaging.py
+++ b/lib/lp/registry/model/packaging.py
@@ -7,7 +7,6 @@ from lazr.lifecycle.event import (
     ObjectCreatedEvent,
     ObjectDeletedEvent,
     )
-from sqlobject import ForeignKey
 from zope.component import getUtility
 from zope.event import notify
 from zope.interface import implementer
@@ -29,6 +28,7 @@ from lp.services.database.constants import (
 from lp.services.database.datetimecol import UtcDateTimeCol
 from lp.services.database.enumcol import EnumCol
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import ForeignKey
 from lp.services.webapp.interfaces import ILaunchBag
 
 
diff --git a/lib/lp/registry/model/person.py b/lib/lp/registry/model/person.py
index 708e937..a469b96 100644
--- a/lib/lp/registry/model/person.py
+++ b/lib/lp/registry/model/person.py
@@ -46,14 +46,6 @@ from lazr.restful.utils import (
 import pytz
 from requests import PreparedRequest
 import six
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    IntCol,
-    SQLMultipleJoin,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.base import Storm
 from storm.expr import (
     Alias,
@@ -312,6 +304,14 @@ from lp.services.propertycache import (
     get_property_cache,
     )
 from lp.services.searchbuilder import any as search_any
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    IntCol,
+    SQLMultipleJoin,
+    SQLObjectNotFound,
+    StringCol,
+    )
 from lp.services.statistics.interfaces.statistic import ILaunchpadStatisticSet
 from lp.services.verification.interfaces.authtoken import LoginTokenType
 from lp.services.verification.interfaces.logintoken import ILoginTokenSet
diff --git a/lib/lp/registry/model/pillar.py b/lib/lp/registry/model/pillar.py
index 7edf34e..be43703 100644
--- a/lib/lp/registry/model/pillar.py
+++ b/lib/lp/registry/model/pillar.py
@@ -10,11 +10,6 @@ from operator import attrgetter
 import warnings
 
 import six
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    StringCol,
-    )
 from storm.databases.postgres import Case
 from storm.expr import (
     And,
@@ -59,6 +54,11 @@ from lp.services.database.stormexpr import (
     rank_by_fti,
     )
 from lp.services.librarian.model import LibraryFileAlias
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    StringCol,
+    )
 
 
 __all__ = [
diff --git a/lib/lp/registry/model/product.py b/lib/lp/registry/model/product.py
index b539782..1fcdb48 100644
--- a/lib/lp/registry/model/product.py
+++ b/lib/lp/registry/model/product.py
@@ -20,13 +20,6 @@ from lazr.restful.declarations import error_status
 from lazr.restful.utils import safe_hasattr
 import pytz
 from six.moves import http_client
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    SQLMultipleJoin,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Coalesce,
@@ -201,6 +194,13 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    SQLMultipleJoin,
+    SQLObjectNotFound,
+    StringCol,
+    )
 from lp.services.statistics.interfaces.statistic import ILaunchpadStatisticSet
 from lp.services.webapp.interfaces import ILaunchBag
 from lp.services.webapp.snapshot import notify_modified
diff --git a/lib/lp/registry/model/productlicense.py b/lib/lp/registry/model/productlicense.py
index 35c905d..6610ed7 100644
--- a/lib/lp/registry/model/productlicense.py
+++ b/lib/lp/registry/model/productlicense.py
@@ -8,13 +8,13 @@ __all__ = [
     ]
 
 
-from sqlobject import ForeignKey
 from zope.interface import implementer
 
 from lp.registry.interfaces.product import License
 from lp.registry.interfaces.productlicense import IProductLicense
 from lp.services.database.enumcol import EnumCol
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import ForeignKey
 
 
 @implementer(IProductLicense)
diff --git a/lib/lp/registry/model/productrelease.py b/lib/lp/registry/model/productrelease.py
index f1e0744..1d91cbc 100644
--- a/lib/lp/registry/model/productrelease.py
+++ b/lib/lp/registry/model/productrelease.py
@@ -14,11 +14,6 @@ from io import (
     )
 import os
 
-from sqlobject import (
-    ForeignKey,
-    SQLMultipleJoin,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Desc,
@@ -53,6 +48,11 @@ from lp.services.database.sqlbase import (
     )
 from lp.services.librarian.interfaces import ILibraryFileAliasSet
 from lp.services.propertycache import cachedproperty
+from lp.services.sqlobject import (
+    ForeignKey,
+    SQLMultipleJoin,
+    StringCol,
+    )
 from lp.services.webapp.publisher import (
     get_raw_form_value_from_current_request,
     )
diff --git a/lib/lp/registry/model/productseries.py b/lib/lp/registry/model/productseries.py
index 0cb2be2..a1ad5f3 100644
--- a/lib/lp/registry/model/productseries.py
+++ b/lib/lp/registry/model/productseries.py
@@ -12,12 +12,6 @@ __all__ = [
 import datetime
 
 from lazr.delegates import delegate_to
-from sqlobject import (
-    ForeignKey,
-    SQLMultipleJoin,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.expr import (
     Max,
     Sum,
@@ -73,6 +67,12 @@ from lp.services.database.enumcol import EnumCol
 from lp.services.database.interfaces import IStore
 from lp.services.database.sqlbase import SQLBase
 from lp.services.propertycache import cachedproperty
+from lp.services.sqlobject import (
+    ForeignKey,
+    SQLMultipleJoin,
+    SQLObjectNotFound,
+    StringCol,
+    )
 from lp.services.webapp.publisher import canonical_url
 from lp.services.webapp.sorting import sorted_dotted_numbers
 from lp.services.worlddata.model.language import Language
diff --git a/lib/lp/registry/model/projectgroup.py b/lib/lp/registry/model/projectgroup.py
index 7c645d8..b1d7fae 100644
--- a/lib/lp/registry/model/projectgroup.py
+++ b/lib/lp/registry/model/projectgroup.py
@@ -10,13 +10,6 @@ __all__ = [
     ]
 
 import six
-from sqlobject import (
-    AND,
-    BoolCol,
-    ForeignKey,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.expr import (
     And,
     In,
@@ -103,6 +96,13 @@ from lp.services.database.sqlbase import (
 from lp.services.database.stormexpr import fti_search
 from lp.services.helpers import shortlist
 from lp.services.propertycache import cachedproperty
+from lp.services.sqlobject import (
+    AND,
+    BoolCol,
+    ForeignKey,
+    SQLObjectNotFound,
+    StringCol,
+    )
 from lp.services.webapp.authorization import check_permission
 from lp.services.webapp.interfaces import ILaunchBag
 from lp.services.worlddata.model.language import Language
diff --git a/lib/lp/registry/model/series.py b/lib/lp/registry/model/series.py
index 0754811..61dabb2 100644
--- a/lib/lp/registry/model/series.py
+++ b/lib/lp/registry/model/series.py
@@ -10,7 +10,6 @@ __all__ = [
 
 from operator import attrgetter
 
-from sqlobject import StringCol
 from zope.interface import implementer
 
 from lp.registry.interfaces.series import (
@@ -18,6 +17,7 @@ from lp.registry.interfaces.series import (
     SeriesStatus,
     )
 from lp.registry.model.hasdrivers import HasDriversMixin
+from lp.services.sqlobject import StringCol
 
 
 ACTIVE_STATUSES = [
diff --git a/lib/lp/registry/model/sharingjob.py b/lib/lp/registry/model/sharingjob.py
index a8bc41a..4cbc419 100644
--- a/lib/lp/registry/model/sharingjob.py
+++ b/lib/lp/registry/model/sharingjob.py
@@ -16,7 +16,6 @@ from lazr.enum import (
     )
 import simplejson
 import six
-from sqlobject import SQLObjectNotFound
 from storm.expr import (
     And,
     In,
@@ -95,6 +94,7 @@ from lp.services.job.model.job import (
     )
 from lp.services.job.runner import BaseRunnableJob
 from lp.services.mail.sendmail import format_address_for_person
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.snappy.interfaces.snap import ISnap
 from lp.snappy.model.snap import (
     get_snap_privacy_filter,
diff --git a/lib/lp/registry/model/sourcepackagename.py b/lib/lp/registry/model/sourcepackagename.py
index e91e5f2..1719cde 100644
--- a/lib/lp/registry/model/sourcepackagename.py
+++ b/lib/lp/registry/model/sourcepackagename.py
@@ -8,11 +8,6 @@ __all__ = [
     ]
 
 import six
-from sqlobject import (
-    SQLMultipleJoin,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from zope.interface import implementer
 
 from lp.app.errors import NotFoundError
@@ -30,6 +25,11 @@ from lp.services.database.sqlbase import (
     SQLBase,
     sqlvalues,
     )
+from lp.services.sqlobject import (
+    SQLMultipleJoin,
+    SQLObjectNotFound,
+    StringCol,
+    )
 
 
 @six.python_2_unicode_compatible
diff --git a/lib/lp/registry/model/teammembership.py b/lib/lp/registry/model/teammembership.py
index f40ec14..5683ac5 100644
--- a/lib/lp/registry/model/teammembership.py
+++ b/lib/lp/registry/model/teammembership.py
@@ -14,10 +14,6 @@ from datetime import (
     )
 
 import pytz
-from sqlobject import (
-    ForeignKey,
-    StringCol,
-    )
 from storm.info import ClassAlias
 from storm.store import Store
 from zope.component import getUtility
@@ -61,6 +57,10 @@ from lp.services.database.sqlbase import (
     SQLBase,
     sqlvalues,
     )
+from lp.services.sqlobject import (
+    ForeignKey,
+    StringCol,
+    )
 
 
 @implementer(ITeamMembership)
diff --git a/lib/lp/registry/tests/test_distributionmirror_prober.py b/lib/lp/registry/tests/test_distributionmirror_prober.py
index 0648923..15cee7a 100644
--- a/lib/lp/registry/tests/test_distributionmirror_prober.py
+++ b/lib/lp/registry/tests/test_distributionmirror_prober.py
@@ -14,7 +14,6 @@ from lazr.uri import URI
 import responses
 import six
 from six.moves import http_client
-from sqlobject import SQLObjectNotFound
 from testtools.matchers import (
     ContainsDict,
     Equals,
@@ -85,6 +84,7 @@ from lp.services.config import config
 from lp.services.daemons.tachandler import TacTestSetup
 from lp.services.database.interfaces import IStore
 from lp.services.httpproxy.connect_tunneling import TunnelingAgent
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.timeout import default_timeout
 from lp.testing import (
     admin_logged_in,
diff --git a/lib/lp/registry/vocabularies.py b/lib/lp/registry/vocabularies.py
index 9adfe8d..359d0aa 100644
--- a/lib/lp/registry/vocabularies.py
+++ b/lib/lp/registry/vocabularies.py
@@ -65,11 +65,6 @@ import re
 
 from lazr.restful.interfaces import IReference
 import six
-from sqlobject import (
-    AND,
-    CONTAINSSTRING,
-    OR,
-    )
 from storm.databases.postgres import Case
 from storm.expr import (
     And,
@@ -196,6 +191,11 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    AND,
+    CONTAINSSTRING,
+    OR,
+    )
 from lp.services.webapp.authorization import (
     check_permission,
     precache_permission_for_objects,
diff --git a/lib/lp/services/database/sqlbase.py b/lib/lp/services/database/sqlbase.py
index 9ee105c..dc1015a 100644
--- a/lib/lp/services/database/sqlbase.py
+++ b/lib/lp/services/database/sqlbase.py
@@ -37,7 +37,6 @@ from psycopg2.extensions import (
     ISOLATION_LEVEL_SERIALIZABLE,
     )
 import pytz
-from sqlobject.sqlbuilder import sqlrepr
 import storm
 from storm.databases.postgres import compile as postgres_compile
 from storm.expr import (
@@ -67,6 +66,7 @@ from lp.services.database.interfaces import (
     MAIN_STORE,
     )
 from lp.services.propertycache import clear_property_cache
+from lp.services.sqlobject import sqlrepr
 
 
 # Default we want for scripts, and the PostgreSQL default. Note psycopg1 will
diff --git a/lib/lp/services/identity/model/account.py b/lib/lp/services/identity/model/account.py
index 26a0c4c..c263c7d 100644
--- a/lib/lp/services/identity/model/account.py
+++ b/lib/lp/services/identity/model/account.py
@@ -11,7 +11,6 @@ __all__ = [
 import datetime
 
 import six
-from sqlobject import StringCol
 from storm.locals import ReferenceSet
 from zope.interface import implementer
 
@@ -31,6 +30,7 @@ from lp.services.identity.interfaces.account import (
     IAccountSet,
     )
 from lp.services.openid.model.openididentifier import OpenIdIdentifier
+from lp.services.sqlobject import StringCol
 
 
 class AccountStatusEnumCol(EnumCol):
diff --git a/lib/lp/services/identity/model/emailaddress.py b/lib/lp/services/identity/model/emailaddress.py
index 08b48d9..874c591 100644
--- a/lib/lp/services/identity/model/emailaddress.py
+++ b/lib/lp/services/identity/model/emailaddress.py
@@ -13,10 +13,6 @@ import hashlib
 import operator
 
 import six
-from sqlobject import (
-    ForeignKey,
-    StringCol,
-    )
 from storm.expr import Lower
 from zope.interface import implementer
 
@@ -37,6 +33,10 @@ from lp.services.identity.interfaces.emailaddress import (
     IEmailAddressSet,
     InvalidEmailAddress,
     )
+from lp.services.sqlobject import (
+    ForeignKey,
+    StringCol,
+    )
 
 
 class HasOwnerMixin:
diff --git a/lib/lp/services/job/model/job.py b/lib/lp/services/job/model/job.py
index f5977e0..b25d626 100644
--- a/lib/lp/services/job/model/job.py
+++ b/lib/lp/services/job/model/job.py
@@ -17,7 +17,6 @@ import time
 
 from lazr.jobrunner.jobrunner import LeaseHeld
 import pytz
-from sqlobject import StringCol
 from storm.expr import (
     And,
     Or,
@@ -42,6 +41,7 @@ from lp.services.job.interfaces.job import (
     JobStatus,
     JobType,
     )
+from lp.services.sqlobject import StringCol
 
 
 UTC = pytz.timezone('UTC')
diff --git a/lib/lp/services/librarian/client.py b/lib/lp/services/librarian/client.py
index 0dc0c61..90e57ca 100644
--- a/lib/lp/services/librarian/client.py
+++ b/lib/lp/services/librarian/client.py
@@ -35,7 +35,6 @@ from six.moves.urllib.parse import (
     urlunparse,
     )
 from six.moves.urllib.request import urlopen
-from sqlobject import SQLObjectNotFound
 from storm.store import Store
 from zope.interface import implementer
 
@@ -53,6 +52,7 @@ from lp.services.librarian.interfaces.client import (
     LibrarianServerError,
     UploadFailed,
     )
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.timeline.requesttimeline import get_request_timeline
 
 
diff --git a/lib/lp/services/librarian/model.py b/lib/lp/services/librarian/model.py
index 05cd4ba..f367ba2 100644
--- a/lib/lp/services/librarian/model.py
+++ b/lib/lp/services/librarian/model.py
@@ -17,13 +17,6 @@ from lazr.delegates import delegate_to
 import pytz
 import six
 from six.moves.urllib.parse import urlparse
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    IntCol,
-    SQLRelatedJoin,
-    StringCol,
-    )
 from storm.locals import (
     Date,
     Desc,
@@ -66,6 +59,13 @@ from lp.services.librarian.interfaces.client import (
     IRestrictedLibrarianClient,
     LIBRARIAN_SERVER_DEFAULT_TIMEOUT,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    IntCol,
+    SQLRelatedJoin,
+    StringCol,
+    )
 from lp.services.tokens import create_token
 
 
diff --git a/lib/lp/services/librarianserver/tests/test_gc.py b/lib/lp/services/librarianserver/tests/test_gc.py
index ecad31c..bb56d0f 100644
--- a/lib/lp/services/librarianserver/tests/test_gc.py
+++ b/lib/lp/services/librarianserver/tests/test_gc.py
@@ -24,7 +24,6 @@ from fixtures import MockPatchObject
 import pytz
 import requests
 from six.moves.urllib.parse import urljoin
-from sqlobject import SQLObjectNotFound
 from storm.store import Store
 from swiftclient import client as swiftclient
 from testtools.matchers import (
@@ -51,6 +50,7 @@ from lp.services.librarianserver import (
     swift,
     )
 from lp.services.log.logger import BufferLogger
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.utils import utc_now
 from lp.testing import (
     monkey_patch,
diff --git a/lib/lp/services/messages/model/message.py b/lib/lp/services/messages/model/message.py
index a3af270..80c3251 100644
--- a/lib/lp/services/messages/model/message.py
+++ b/lib/lp/services/messages/model/message.py
@@ -29,14 +29,6 @@ import os.path
 from lazr.config import as_timedelta
 import pytz
 import six
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    IntCol,
-    SQLMultipleJoin,
-    SQLRelatedJoin,
-    StringCol,
-    )
 from storm.locals import (
     And,
     DateTime,
@@ -79,6 +71,14 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    IntCol,
+    SQLMultipleJoin,
+    SQLRelatedJoin,
+    StringCol,
+    )
 
 
 def utcdatetime_from_field(field_value):
diff --git a/lib/sqlobject/__init__.py b/lib/lp/services/sqlobject/__init__.py
similarity index 100%
rename from lib/sqlobject/__init__.py
rename to lib/lp/services/sqlobject/__init__.py
diff --git a/lib/lp/services/statistics/model/statistics.py b/lib/lp/services/statistics/model/statistics.py
index fcc6ae9..bc049da 100644
--- a/lib/lp/services/statistics/model/statistics.py
+++ b/lib/lp/services/statistics/model/statistics.py
@@ -8,10 +8,6 @@ __all__ = [
     'LaunchpadStatisticSet',
     ]
 
-from sqlobject import (
-    IntCol,
-    StringCol,
-    )
 from zope.component import getUtility
 from zope.interface import implementer
 
@@ -32,6 +28,10 @@ from lp.services.database.sqlbase import (
     cursor,
     SQLBase,
     )
+from lp.services.sqlobject import (
+    IntCol,
+    StringCol,
+    )
 from lp.services.statistics.interfaces.statistic import (
     ILaunchpadStatistic,
     ILaunchpadStatisticSet,
diff --git a/lib/lp/services/verification/model/logintoken.py b/lib/lp/services/verification/model/logintoken.py
index 6ceca6a..2704b74 100644
--- a/lib/lp/services/verification/model/logintoken.py
+++ b/lib/lp/services/verification/model/logintoken.py
@@ -10,11 +10,6 @@ import hashlib
 
 import pytz
 import six
-from sqlobject import (
-    ForeignKey,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.expr import And
 from zope.component import getUtility
 from zope.interface import implementer
@@ -41,6 +36,11 @@ from lp.services.mail.sendmail import (
     format_address,
     simple_sendmail,
     )
+from lp.services.sqlobject import (
+    ForeignKey,
+    SQLObjectNotFound,
+    StringCol,
+    )
 from lp.services.tokens import create_token
 from lp.services.verification.interfaces.authtoken import LoginTokenType
 from lp.services.verification.interfaces.logintoken import (
diff --git a/lib/lp/services/webapp/vocabulary.py b/lib/lp/services/webapp/vocabulary.py
index 9869535..5084755 100644
--- a/lib/lp/services/webapp/vocabulary.py
+++ b/lib/lp/services/webapp/vocabulary.py
@@ -25,10 +25,6 @@ from collections import namedtuple
 
 from lazr.restful.utils import safe_hasattr
 import six
-from sqlobject import (
-    AND,
-    CONTAINSSTRING,
-    )
 from storm.base import Storm
 from storm.store import EmptyResultSet
 from zope.interface import (
@@ -48,6 +44,10 @@ from zope.security.proxy import isinstance as zisinstance
 
 from lp.services.database.interfaces import IStore
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import (
+    AND,
+    CONTAINSSTRING,
+    )
 
 
 class ForgivingSimpleVocabulary(SimpleVocabulary):
diff --git a/lib/lp/services/worlddata/model/country.py b/lib/lp/services/worlddata/model/country.py
index 32006a8..2838e23 100644
--- a/lib/lp/services/worlddata/model/country.py
+++ b/lib/lp/services/worlddata/model/country.py
@@ -4,17 +4,17 @@
 __all__ = ['Country', 'CountrySet', 'Continent']
 
 import six
-from sqlobject import (
-    ForeignKey,
-    SQLRelatedJoin,
-    StringCol,
-    )
 from zope.interface import implementer
 
 from lp.app.errors import NotFoundError
 from lp.services.database.constants import DEFAULT
 from lp.services.database.interfaces import IStore
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import (
+    ForeignKey,
+    SQLRelatedJoin,
+    StringCol,
+    )
 from lp.services.worlddata.interfaces.country import (
     IContinent,
     ICountry,
diff --git a/lib/lp/services/worlddata/model/language.py b/lib/lp/services/worlddata/model/language.py
index 2682190..91e8e99 100644
--- a/lib/lp/services/worlddata/model/language.py
+++ b/lib/lp/services/worlddata/model/language.py
@@ -8,13 +8,6 @@ __all__ = [
     ]
 
 import six
-from sqlobject import (
-    BoolCol,
-    IntCol,
-    SQLObjectNotFound,
-    SQLRelatedJoin,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Count,
@@ -41,6 +34,13 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    IntCol,
+    SQLObjectNotFound,
+    SQLRelatedJoin,
+    StringCol,
+    )
 from lp.services.worlddata.interfaces.language import (
     ILanguage,
     ILanguageSet,
diff --git a/lib/lp/services/worlddata/model/spokenin.py b/lib/lp/services/worlddata/model/spokenin.py
index 1d75dbb..ab682e2 100644
--- a/lib/lp/services/worlddata/model/spokenin.py
+++ b/lib/lp/services/worlddata/model/spokenin.py
@@ -3,10 +3,10 @@
 
 __all__ = ['SpokenIn']
 
-from sqlobject import ForeignKey
 from zope.interface import implementer
 
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import ForeignKey
 from lp.services.worlddata.interfaces.spokenin import ISpokenIn
 
 
diff --git a/lib/lp/snappy/browser/snapbase.py b/lib/lp/snappy/browser/snapbase.py
index 144963f..9a494a4 100644
--- a/lib/lp/snappy/browser/snapbase.py
+++ b/lib/lp/snappy/browser/snapbase.py
@@ -8,9 +8,9 @@ __all__ = [
     "SnapBaseSetNavigation",
     ]
 
-from sqlobject import SQLObjectNotFound
 from zope.component import getUtility
 
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.webapp import (
     GetitemNavigation,
     Navigation,
diff --git a/lib/lp/soyuz/browser/archive.py b/lib/lp/soyuz/browser/archive.py
index 5aadc23..7b3d49a 100644
--- a/lib/lp/soyuz/browser/archive.py
+++ b/lib/lp/soyuz/browser/archive.py
@@ -34,7 +34,6 @@ from operator import attrgetter
 
 from lazr.restful.utils import smartquote
 import pytz
-from sqlobject import SQLObjectNotFound
 from storm.expr import Desc
 from zope.component import getUtility
 from zope.formlib import form
@@ -101,6 +100,7 @@ from lp.services.librarian.browser import (
     FileNavigationMixin,
     )
 from lp.services.propertycache import cachedproperty
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.services.webapp import (
     canonical_url,
     enabled_with_permission,
diff --git a/lib/lp/soyuz/doc/gina.txt b/lib/lp/soyuz/doc/gina.txt
index 4cecccf..799d90f 100644
--- a/lib/lp/soyuz/doc/gina.txt
+++ b/lib/lp/soyuz/doc/gina.txt
@@ -489,7 +489,7 @@ Ensure only one Kamion was created (he's an uploader on multiple packages),
 and that we imported exactly 9 people (13 packages with 3 being uploaded by
 Kamion, 2 being uploaded by mdz and 2 by doko).
 
-    >>> from sqlobject import LIKE
+    >>> from lp.services.sqlobject import LIKE
     >>> p = Person.selectOne(LIKE(Person.q.name, u"cjwatson%"))
     >>> print(p.name)
     cjwatson
diff --git a/lib/lp/soyuz/model/archive.py b/lib/lp/soyuz/model/archive.py
index 3888a05..44a5e36 100644
--- a/lib/lp/soyuz/model/archive.py
+++ b/lib/lp/soyuz/model/archive.py
@@ -16,12 +16,6 @@ import re
 
 from lazr.lifecycle.event import ObjectCreatedEvent
 import six
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    IntCol,
-    StringCol,
-    )
 from storm.base import Storm
 from storm.expr import (
     And,
@@ -131,6 +125,12 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    IntCol,
+    StringCol,
+    )
 from lp.services.tokens import create_token
 from lp.services.webapp.authorization import check_permission
 from lp.services.webapp.interfaces import ILaunchBag
diff --git a/lib/lp/soyuz/model/binarypackagebuild.py b/lib/lp/soyuz/model/binarypackagebuild.py
index 5975da3..6df444c 100644
--- a/lib/lp/soyuz/model/binarypackagebuild.py
+++ b/lib/lp/soyuz/model/binarypackagebuild.py
@@ -22,7 +22,6 @@ import apt_pkg
 from debian.deb822 import PkgRelation
 import pytz
 import six
-from sqlobject import SQLObjectNotFound
 from storm.expr import (
     And,
     Desc,
@@ -88,6 +87,7 @@ from lp.services.macaroons.interfaces import (
     NO_USER,
     )
 from lp.services.macaroons.model import MacaroonIssuerBase
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.soyuz.adapters.buildarch import determine_architectures_to_build
 from lp.soyuz.enums import (
     ArchivePurpose,
diff --git a/lib/lp/soyuz/model/binarypackagename.py b/lib/lp/soyuz/model/binarypackagename.py
index d8eb09c..2d7e9eb 100644
--- a/lib/lp/soyuz/model/binarypackagename.py
+++ b/lib/lp/soyuz/model/binarypackagename.py
@@ -7,10 +7,6 @@ __all__ = [
     ]
 
 import six
-from sqlobject import (
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.expr import Join
 from storm.store import EmptyResultSet
 from zope.interface import implementer
@@ -18,6 +14,10 @@ from zope.interface import implementer
 from lp.app.errors import NotFoundError
 from lp.services.database.interfaces import IStore
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import (
+    SQLObjectNotFound,
+    StringCol,
+    )
 from lp.soyuz.interfaces.binarypackagename import (
     IBinaryPackageName,
     IBinaryPackageNameSet,
diff --git a/lib/lp/soyuz/model/binarypackagerelease.py b/lib/lp/soyuz/model/binarypackagerelease.py
index 34551ce..16dec2e 100644
--- a/lib/lp/soyuz/model/binarypackagerelease.py
+++ b/lib/lp/soyuz/model/binarypackagerelease.py
@@ -9,12 +9,6 @@ __all__ = [
 from operator import attrgetter
 
 import simplejson
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    IntCol,
-    StringCol,
-    )
 from storm.locals import (
     Date,
     Int,
@@ -33,6 +27,12 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    IntCol,
+    StringCol,
+    )
 from lp.soyuz.enums import (
     BinaryPackageFileType,
     BinaryPackageFormat,
diff --git a/lib/lp/soyuz/model/component.py b/lib/lp/soyuz/model/component.py
index b835e1b..483e307 100644
--- a/lib/lp/soyuz/model/component.py
+++ b/lib/lp/soyuz/model/component.py
@@ -7,14 +7,14 @@ __all__ = [
     'ComponentSet'
     ]
 
-from sqlobject import (
-    ForeignKey,
-    StringCol,
-    )
 from zope.interface import implementer
 
 from lp.app.errors import NotFoundError
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import (
+    ForeignKey,
+    StringCol,
+    )
 from lp.soyuz.interfaces.component import (
     IComponent,
     IComponentSelection,
diff --git a/lib/lp/soyuz/model/distributionsourcepackagecache.py b/lib/lp/soyuz/model/distributionsourcepackagecache.py
index 1fd5775..19bed5d 100644
--- a/lib/lp/soyuz/model/distributionsourcepackagecache.py
+++ b/lib/lp/soyuz/model/distributionsourcepackagecache.py
@@ -9,10 +9,6 @@ from operator import (
     itemgetter,
     )
 
-from sqlobject import (
-    ForeignKey,
-    StringCol,
-    )
 from zope.interface import implementer
 
 from lp.code.model.seriessourcepackagebranch import SeriesSourcePackageBranch
@@ -22,6 +18,10 @@ from lp.services.database import bulk
 from lp.services.database.decoratedresultset import DecoratedResultSet
 from lp.services.database.interfaces import IStore
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import (
+    ForeignKey,
+    StringCol,
+    )
 from lp.soyuz.interfaces.distributionsourcepackagecache import (
     IDistributionSourcePackageCache,
     )
diff --git a/lib/lp/soyuz/model/distroarchseries.py b/lib/lp/soyuz/model/distroarchseries.py
index cb01aed..0454994 100644
--- a/lib/lp/soyuz/model/distroarchseries.py
+++ b/lib/lp/soyuz/model/distroarchseries.py
@@ -9,14 +9,6 @@ __all__ = [
 import hashlib
 from io import BytesIO
 
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    IntCol,
-    SQLObjectNotFound,
-    SQLRelatedJoin,
-    StringCol,
-    )
 from storm.locals import (
     Int,
     Join,
@@ -41,6 +33,14 @@ from lp.services.database.stormexpr import (
     rank_by_fti,
     )
 from lp.services.librarian.interfaces import ILibraryFileAliasSet
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    IntCol,
+    SQLObjectNotFound,
+    SQLRelatedJoin,
+    StringCol,
+    )
 from lp.services.webapp.publisher import (
     get_raw_form_value_from_current_request,
     )
diff --git a/lib/lp/soyuz/model/distroseriespackagecache.py b/lib/lp/soyuz/model/distroseriespackagecache.py
index 337e7cd..a114569 100644
--- a/lib/lp/soyuz/model/distroseriespackagecache.py
+++ b/lib/lp/soyuz/model/distroseriespackagecache.py
@@ -8,10 +8,6 @@ __all__ = [
 from collections import defaultdict
 from operator import attrgetter
 
-from sqlobject import (
-    ForeignKey,
-    StringCol,
-    )
 from storm.expr import (
     Desc,
     Max,
@@ -22,6 +18,10 @@ from zope.interface import implementer
 from lp.services.database import bulk
 from lp.services.database.interfaces import IStore
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import (
+    ForeignKey,
+    StringCol,
+    )
 from lp.soyuz.interfaces.distroseriespackagecache import (
     IDistroSeriesPackageCache,
     )
diff --git a/lib/lp/soyuz/model/files.py b/lib/lp/soyuz/model/files.py
index 256b21f..cee9bef 100644
--- a/lib/lp/soyuz/model/files.py
+++ b/lib/lp/soyuz/model/files.py
@@ -7,12 +7,12 @@ __all__ = [
     'SourcePackageReleaseFile',
     ]
 
-from sqlobject import ForeignKey
 from zope.interface import implementer
 
 from lp.registry.interfaces.sourcepackage import SourcePackageFileType
 from lp.services.database.enumcol import EnumCol
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import ForeignKey
 from lp.soyuz.enums import BinaryPackageFileType
 from lp.soyuz.interfaces.files import (
     IBinaryPackageFile,
diff --git a/lib/lp/soyuz/model/packagediff.py b/lib/lp/soyuz/model/packagediff.py
index ecfeccd..ba125a7 100644
--- a/lib/lp/soyuz/model/packagediff.py
+++ b/lib/lp/soyuz/model/packagediff.py
@@ -16,7 +16,6 @@ import subprocess
 import tempfile
 
 import six
-from sqlobject import ForeignKey
 from storm.expr import Desc
 from storm.store import EmptyResultSet
 from zope.component import getUtility
@@ -39,6 +38,7 @@ from lp.services.librarian.model import (
     LibraryFileContent,
     )
 from lp.services.librarian.utils import copy_and_close
+from lp.services.sqlobject import ForeignKey
 from lp.soyuz.enums import PackageDiffStatus
 from lp.soyuz.interfaces.packagediff import (
     IPackageDiff,
diff --git a/lib/lp/soyuz/model/publishing.py b/lib/lp/soyuz/model/publishing.py
index f7c1fb1..cbd06b6 100644
--- a/lib/lp/soyuz/model/publishing.py
+++ b/lib/lp/soyuz/model/publishing.py
@@ -21,11 +21,6 @@ import sys
 
 import pytz
 import six
-from sqlobject import (
-    ForeignKey,
-    IntCol,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Cast,
@@ -71,6 +66,11 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    ForeignKey,
+    IntCol,
+    StringCol,
+    )
 from lp.services.webapp.errorlog import (
     ErrorReportingUtility,
     ScriptRequest,
diff --git a/lib/lp/soyuz/model/queue.py b/lib/lp/soyuz/model/queue.py
index 29b5a2d..d3b5912 100644
--- a/lib/lp/soyuz/model/queue.py
+++ b/lib/lp/soyuz/model/queue.py
@@ -17,12 +17,6 @@ from operator import attrgetter
 
 import pytz
 import six
-from sqlobject import (
-    ForeignKey,
-    SQLMultipleJoin,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.expr import Cast
 from storm.locals import (
     And,
@@ -85,6 +79,12 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    ForeignKey,
+    SQLMultipleJoin,
+    SQLObjectNotFound,
+    StringCol,
+    )
 from lp.soyuz.enums import (
     PackageUploadCustomFormat,
     PackageUploadStatus,
diff --git a/lib/lp/soyuz/model/section.py b/lib/lp/soyuz/model/section.py
index 7d0005b..3535fdb 100644
--- a/lib/lp/soyuz/model/section.py
+++ b/lib/lp/soyuz/model/section.py
@@ -7,14 +7,14 @@ __all__ = [
     'SectionSet'
     ]
 
-from sqlobject import (
-    ForeignKey,
-    StringCol,
-    )
 from zope.interface import implementer
 
 from lp.app.errors import NotFoundError
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import (
+    ForeignKey,
+    StringCol,
+    )
 from lp.soyuz.interfaces.section import (
     ISection,
     ISectionSelection,
diff --git a/lib/lp/soyuz/model/sourcepackagerelease.py b/lib/lp/soyuz/model/sourcepackagerelease.py
index f8d06fe..ab63076 100644
--- a/lib/lp/soyuz/model/sourcepackagerelease.py
+++ b/lib/lp/soyuz/model/sourcepackagerelease.py
@@ -20,11 +20,6 @@ from debian.changelog import (
     )
 import pytz
 import six
-from sqlobject import (
-    ForeignKey,
-    SQLMultipleJoin,
-    StringCol,
-    )
 from storm.expr import Join
 from storm.locals import (
     Desc,
@@ -61,6 +56,11 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    ForeignKey,
+    SQLMultipleJoin,
+    StringCol,
+    )
 from lp.soyuz.interfaces.archive import MAIN_ARCHIVE_PURPOSES
 from lp.soyuz.interfaces.packagediff import PackageDiffAlreadyRequested
 from lp.soyuz.interfaces.packagediffjob import IPackageDiffJobSource
diff --git a/lib/lp/soyuz/scripts/gina/handlers.py b/lib/lp/soyuz/scripts/gina/handlers.py
index 2af6e5d..ce29a45 100644
--- a/lib/lp/soyuz/scripts/gina/handlers.py
+++ b/lib/lp/soyuz/scripts/gina/handlers.py
@@ -23,7 +23,6 @@ import os
 import re
 
 import six
-from sqlobject import SQLObjectNotFound
 from storm.exceptions import NotOneError
 from storm.expr import (
     Cast,
@@ -49,6 +48,7 @@ from lp.services.database.interfaces import IStore
 from lp.services.database.sqlbase import quote
 from lp.services.librarian.interfaces import ILibraryFileAliasSet
 from lp.services.scripts import log
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.soyuz.enums import (
     BinaryPackageFormat,
     BinarySourceReferenceType,
diff --git a/lib/lp/translations/model/pofile.py b/lib/lp/translations/model/pofile.py
index b977bda..ff4ecb4 100644
--- a/lib/lp/translations/model/pofile.py
+++ b/lib/lp/translations/model/pofile.py
@@ -15,12 +15,6 @@ import datetime
 
 import pytz
 import six
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    IntCol,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Cast,
@@ -64,6 +58,12 @@ from lp.services.database.sqlbase import (
     )
 from lp.services.mail.helpers import get_email_template
 from lp.services.propertycache import cachedproperty
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    IntCol,
+    StringCol,
+    )
 from lp.services.webapp.publisher import canonical_url
 from lp.translations.enums import RosettaImportStatus
 from lp.translations.interfaces.pofile import (
diff --git a/lib/lp/translations/model/pofiletranslator.py b/lib/lp/translations/model/pofiletranslator.py
index 83f500a..769e4e9 100644
--- a/lib/lp/translations/model/pofiletranslator.py
+++ b/lib/lp/translations/model/pofiletranslator.py
@@ -8,7 +8,6 @@ __all__ = [
 
 from operator import itemgetter
 
-from sqlobject import ForeignKey
 from storm.expr import (
     And,
     Join,
@@ -26,6 +25,7 @@ from lp.services.database.datetimecol import UtcDateTimeCol
 from lp.services.database.decoratedresultset import DecoratedResultSet
 from lp.services.database.interfaces import IStore
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import ForeignKey
 from lp.translations.interfaces.pofiletranslator import (
     IPOFileTranslator,
     IPOFileTranslatorSet,
diff --git a/lib/lp/translations/model/potemplate.py b/lib/lp/translations/model/potemplate.py
index 5d0d9ec..a44bc89 100644
--- a/lib/lp/translations/model/potemplate.py
+++ b/lib/lp/translations/model/potemplate.py
@@ -19,13 +19,6 @@ import os
 
 from psycopg2.extensions import TransactionRollbackError
 import six
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    IntCol,
-    SQLMultipleJoin,
-    StringCol,
-    )
 from storm.expr import (
     And,
     Desc,
@@ -66,6 +59,13 @@ from lp.services.database.sqlbase import (
 from lp.services.helpers import shortlist
 from lp.services.mail.helpers import get_email_template
 from lp.services.propertycache import cachedproperty
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    IntCol,
+    SQLMultipleJoin,
+    StringCol,
+    )
 from lp.services.worlddata.interfaces.language import ILanguageSet
 from lp.services.worlddata.model.language import Language
 from lp.translations.enums import RosettaImportStatus
diff --git a/lib/lp/translations/model/potmsgset.py b/lib/lp/translations/model/potmsgset.py
index ad48fa2..e4d3908 100644
--- a/lib/lp/translations/model/potmsgset.py
+++ b/lib/lp/translations/model/potmsgset.py
@@ -14,7 +14,6 @@ import logging
 import re
 
 import six
-from sqlobject import StringCol
 from storm.expr import (
     And,
     Coalesce,
@@ -56,6 +55,7 @@ from lp.services.database.stormexpr import (
     )
 from lp.services.helpers import shortlist
 from lp.services.propertycache import get_property_cache
+from lp.services.sqlobject import StringCol
 from lp.translations.interfaces.potmsgset import (
     IPOTMsgSet,
     POTMsgSetInIncompatibleTemplatesError,
diff --git a/lib/lp/translations/model/translationgroup.py b/lib/lp/translations/model/translationgroup.py
index c138acc..9b01c86 100644
--- a/lib/lp/translations/model/translationgroup.py
+++ b/lib/lp/translations/model/translationgroup.py
@@ -8,13 +8,6 @@ __all__ = [
 
 import operator
 
-from sqlobject import (
-    ForeignKey,
-    SQLMultipleJoin,
-    SQLObjectNotFound,
-    SQLRelatedJoin,
-    StringCol,
-    )
 from storm.expr import (
     Desc,
     Join,
@@ -40,6 +33,13 @@ from lp.services.librarian.model import (
     LibraryFileAlias,
     LibraryFileContent,
     )
+from lp.services.sqlobject import (
+    ForeignKey,
+    SQLMultipleJoin,
+    SQLObjectNotFound,
+    SQLRelatedJoin,
+    StringCol,
+    )
 from lp.services.worlddata.model.language import Language
 from lp.translations.interfaces.translationgroup import (
     ITranslationGroup,
diff --git a/lib/lp/translations/model/translationmessage.py b/lib/lp/translations/model/translationmessage.py
index 42c1987..bd4db5e 100644
--- a/lib/lp/translations/model/translationmessage.py
+++ b/lib/lp/translations/model/translationmessage.py
@@ -12,12 +12,6 @@ __all__ = [
 from datetime import datetime
 
 import pytz
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    SQLObjectNotFound,
-    StringCol,
-    )
 from storm.expr import And
 from storm.locals import (
     Int,
@@ -53,6 +47,12 @@ from lp.services.propertycache import (
     cachedproperty,
     get_property_cache,
     )
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    SQLObjectNotFound,
+    StringCol,
+    )
 from lp.translations.interfaces.potemplate import IPOTemplateSet
 from lp.translations.interfaces.side import TranslationSide
 from lp.translations.interfaces.translationmessage import (
diff --git a/lib/lp/translations/model/translationrelicensingagreement.py b/lib/lp/translations/model/translationrelicensingagreement.py
index ca3d9ae..65fd81d 100644
--- a/lib/lp/translations/model/translationrelicensingagreement.py
+++ b/lib/lp/translations/model/translationrelicensingagreement.py
@@ -5,16 +5,16 @@ __all__ = [
     'TranslationRelicensingAgreement',
     ]
 
-from sqlobject import (
-    BoolCol,
-    ForeignKey,
-    )
 from zope.interface import implementer
 
 from lp.registry.interfaces.person import validate_public_person
 from lp.services.database.constants import UTC_NOW
 from lp.services.database.datetimecol import UtcDateTimeCol
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import (
+    BoolCol,
+    ForeignKey,
+    )
 from lp.translations.interfaces.translationrelicensingagreement import (
     ITranslationRelicensingAgreement,
     )
diff --git a/lib/lp/translations/model/translationtemplateitem.py b/lib/lp/translations/model/translationtemplateitem.py
index e563d06..1186108 100644
--- a/lib/lp/translations/model/translationtemplateitem.py
+++ b/lib/lp/translations/model/translationtemplateitem.py
@@ -5,13 +5,13 @@ __all__ = [
     'TranslationTemplateItem',
     ]
 
-from sqlobject import (
-    ForeignKey,
-    IntCol,
-    )
 from zope.interface import implementer
 
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import (
+    ForeignKey,
+    IntCol,
+    )
 from lp.translations.interfaces.translationtemplateitem import (
     ITranslationTemplateItem,
     )
diff --git a/lib/lp/translations/model/translator.py b/lib/lp/translations/model/translator.py
index 93e0804..1b8a8c9 100644
--- a/lib/lp/translations/model/translator.py
+++ b/lib/lp/translations/model/translator.py
@@ -3,10 +3,6 @@
 
 __all__ = ['Translator', 'TranslatorSet']
 
-from sqlobject import (
-    ForeignKey,
-    StringCol,
-    )
 from storm.expr import Join
 from storm.store import Store
 from zope.interface import implementer
@@ -16,6 +12,10 @@ from lp.registry.model.teammembership import TeamParticipation
 from lp.services.database.constants import DEFAULT
 from lp.services.database.datetimecol import UtcDateTimeCol
 from lp.services.database.sqlbase import SQLBase
+from lp.services.sqlobject import (
+    ForeignKey,
+    StringCol,
+    )
 from lp.translations.interfaces.translator import (
     ITranslator,
     ITranslatorSet,
diff --git a/lib/lp/translations/scripts/fix_plural_forms.py b/lib/lp/translations/scripts/fix_plural_forms.py
index cc6dfed..ea2c057 100644
--- a/lib/lp/translations/scripts/fix_plural_forms.py
+++ b/lib/lp/translations/scripts/fix_plural_forms.py
@@ -7,10 +7,9 @@ __all__ = [
     'fix_plurals_in_all_pofiles',
     ]
 
-from sqlobject import SQLObjectNotFound
-
 from lp.services.database.interfaces import IStore
 from lp.services.database.sqlbase import cursor
+from lp.services.sqlobject import SQLObjectNotFound
 from lp.translations.interfaces.translations import TranslationConstants
 from lp.translations.model.pofile import POFile
 from lp.translations.model.potmsgset import POTMsgSet
diff --git a/lib/lp/translations/vocabularies.py b/lib/lp/translations/vocabularies.py
index fe52925..285e80d 100644
--- a/lib/lp/translations/vocabularies.py
+++ b/lib/lp/translations/vocabularies.py
@@ -13,7 +13,6 @@ __all__ = [
     'TranslationTemplateVocabulary',
     ]
 
-from sqlobject import AND
 from storm.locals import (
     Desc,
     Not,
@@ -22,6 +21,7 @@ from storm.locals import (
 from zope.schema.vocabulary import SimpleTerm
 
 from lp.registry.interfaces.distroseries import IDistroSeries
+from lp.services.sqlobject import AND
 from lp.services.webapp.vocabulary import (
     NamedSQLObjectVocabulary,
     SQLObjectVocabularyBase,