Django
Django is a popular Python web framework with a powerful ORM for working with databases.
YDB supports integration with Django through a special django-ydb-backend backend, which provides full Django ORM support for working with YDB.
Quick Start
Installation
Install the django-ydb-backend package using pip:
pip install django-ydb-backend
Connection Setup
Add YDB to your Django settings in settings.py:
DATABASES = {
"default": {
"NAME": "ydb_db",
"ENGINE": "ydb_backend.backend",
"HOST": "localhost",
"PORT": "2136",
"DATABASE": "/local",
}
}
Configuration
DATABASES
Required parameters:
- NAME (required): traditional Django database name
- ENGINE (required): must be set to
ydb_backend.backend - HOST (required): hostname or IP address of the YDB server (e.g., "localhost")
- PORT (required): gRPC port YDB is running on (default is 2136)
- DATABASE (required): full path to your YDB database (e.g., "/local" for local testing or "/my_production_db")
DATABASES = {
"default": {
"NAME": "ydb_db",
"ENGINE": "ydb_backend.backend",
"HOST": "localhost",
"PORT": "2136",
"DATABASE": "/local",
}
}
Authentication Methods
Anonymous Authentication
To use anonymous authentication, you don't need to pass any additional parameters.
Static Authentication
To use static credentials, you should provide username and password:
DATABASES = {
"default": {
"ENGINE": "ydb_backend.backend",
"CREDENTIALS": {
"username": "...",
"password": "..."
}
}
}
Token Authentication
To use access token credentials, you should provide token:
DATABASES = {
"default": {
"ENGINE": "ydb_backend.backend",
"CREDENTIALS": {
"token": "..."
},
}
}
Service Account Authentication
To use service account credentials, you should provide service_account_json:
DATABASES = {
"default": {
"ENGINE": "ydb_backend.backend",
"CREDENTIALS": {
"service_account_json": {
"id": "...",
"service_account_id": "...",
"created_at": "...",
"key_algorithm": "...",
"public_key": "...",
"private_key": "..."
}
}
}
}
Django Fields
YDB backend supports Django builtin fields.
Note: ForeignKey, ManyToManyField or even OneToOneField could be used with YDB backend. However, it's important to note that these relationships won't enforce database-level constraints, which may lead to potential data consistency issues.
Supported Django Fields
| Class | YDB Type | Python Type | Comments |
|---|---|---|---|
SmallAutoField |
Int16 |
int |
YDB type SmallSerial will generate value automatically. Range -32768 to 32767 |
AutoField |
Int32 |
int |
YDB type Serial will generate value automatically. Range -2147483648 to 2147483647 |
BigAutoField |
Int64 |
int |
YDB type BigSerial will generate value automatically. Range -9223372036854775808 to 9223372036854775807 |
CharField |
UTF-8 |
str |
|
TextField |
UTF-8 |
str |
|
BinaryField |
String |
bytes |
|
SlugField |
UTF-8 |
str |
|
FileField |
String |
bytes |
|
FilePathField |
UTF-8 |
str |
|
DateField |
Date |
datetime.date |
Range of values for all time types except Interval: From 00:00 01.01.1970 to 00:00 01.01.2106. Internal Date representation: Unsigned 16-bit integer |
DateTimeField |
DateTime |
datetime.datetime |
Internal representation: Unsigned 32-bit integer |
DurationField |
Interval |
int |
The range of values is from -136 years to +136 years. The internal representation is a 64–bit signed integer. Cannot be used in the primary key |
SmallIntegerField |
Int16 |
int |
Range -32768 to 32767 |
IntegerField |
Int32 |
int |
Range -2147483648 to 2147483647 |
BigIntegerField |
Int64 |
int |
Range -9223372036854775808 to 9223372036854775807 |
PositiveSmallIntegerField |
UInt16 |
int |
Range 0 to 65535 |
PositiveIntegerField |
UInt32 |
int |
Range 0 to 4294967295 |
PositiveBigIntegerField |
UInt64 |
int |
Range 0 to 18446744073709551615 |
FloatField |
Float |
float |
A real number with variable precision, 4 bytes in size. Can't be used in the primary key |
DecimalField |
Decimal |
Decimal |
Pythonic values are rounded to fit the scale of the database field. Supports only Decimal(22,9) |
UUIDField |
UUID |
uuid.UUID |
|
IPAddressField |
UTF-8 |
str |
|
GenericIPAddressField |
UTF-8 |
str |
|
BooleanField |
Bool |
boolean |
|
EmailField |
UTF-8 |
str |