diff --git a/databases/backends/psycopg.py b/databases/backends/psycopg.py index eb3cec16..527b2600 100644 --- a/databases/backends/psycopg.py +++ b/databases/backends/psycopg.py @@ -1,6 +1,5 @@ import typing -import orjson import psycopg import psycopg.adapt import psycopg.types @@ -20,15 +19,33 @@ TransactionBackend, ) +try: + import orjson + + def load(data): + return orjson.loads(data) + + def dump(data): + return orjson.dumps(data) + +except ImportError: + import json + + def load(data): + return json.loads(data.decode("utf-8")) + + def dump(data): + return json.dumps(data).encode("utf-8") + class JsonLoader(psycopg.adapt.Loader): def load(self, data): - return orjson.loads(data) + return load(data) class JsonDumper(psycopg.adapt.Dumper): def dump(self, data): - return orjson.dumps(data) + return dump(data) class PsycopgBackend(DatabaseBackend): diff --git a/databases/core.py b/databases/core.py index cba06ced..32690fe6 100644 --- a/databases/core.py +++ b/databases/core.py @@ -49,7 +49,7 @@ class Database: "postgresql+asyncpg": "databases.backends.asyncpg:AsyncpgBackend", "postgresql+psycopg": "databases.backends.psycopg:PsycopgBackend", "mysql": "databases.backends.mysql:MySQLBackend", - "mysql+aiomysql": "databases.backends.asyncmy:MySQLBackend", + "mysql+aiomysql": "databases.backends.mysql:MySQLBackend", "mysql+asyncmy": "databases.backends.asyncmy:AsyncMyBackend", "sqlite": "databases.backends.sqlite:SQLiteBackend", "sqlite+aiosqlite": "databases.backends.sqlite:SQLiteBackend", diff --git a/requirements.txt b/requirements.txt index 785c998b..450b1c63 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,8 @@ -e . +# Speedups +orjson==3.9.15 + # Async database drivers asyncmy==0.2.9 aiomysql==0.2.0 diff --git a/setup.py b/setup.py index 4ad4fc5b..33b6f137 100644 --- a/setup.py +++ b/setup.py @@ -58,6 +58,7 @@ def get_packages(package): "psycopg3": ["psycopg", "psycopg-pool"], "sqlite": ["aiosqlite"], "aiosqlite": ["aiosqlite"], + "orjson": ["orjson"], }, classifiers=[ "Development Status :: 3 - Alpha",