Как использовать UUIDField для SQLite?
Как сгенерировать UUIDField, работающий для SQLite?
Я хочу использовать SQLite вместо Postgres для своих тестов, чтобы они выполнялись быстрее.
# settings.py
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
# ...
}
}
# Tests use sqlite instead of postgres
import sys
if (
"test" in sys.argv or "test_coverage" in sys.argv
): # Covers regular testing and django-coverage
DATABASES["default"]["ENGINE"] = "django.db.backends.sqlite3"
Однако, похоже, я не могу создать UUID, который бы соответствовал требованиям Django UUIDField
для SQLite:
Поле для хранения универсально уникальных идентификаторов. Использует класс UUID из Python. При использовании в PostgreSQL хранится в типе данных uuid, в противном случае в char(32).
Следующее не работает, даже если значение uuid равно 32 символам:
# models.py
class Item(models.Model):
uuid = models.UUIDField()
# tests.py
uuid = str(uuid.uuid4()).replace("-", "")
Item.objects.create(uuid=uuid)
Я получаю эту ошибку: django.db.utils.InterfaceError: Error binding parameter 4 - probably unsupported type.
Независимо от того, какой тип лежит в основе, Django преобразует UUID в правильный формат и вставит его в базу данных. Для SQLite это означает, что UUIDField
преобразует его в строку.
Таким образом, вы можете создать элемент с:
import uuid
Item.objects.create(
uuid=uuid.uuid4()
)