Defining models
DipDup uses the Tortoise ORM library to cover database operations. During initialization, DipDup generates a models.py
file on the top level of the package that will contain all database models. The name and location of this file cannot be changed.
A typical models.py
file looks like the following (example from demo_domains
package):
from typing import Optional
from tortoise import fields
from tortoise.fields.relational import ForeignKeyFieldInstance
from dipdup.models import Model
class TLD(Model):
id = fields.CharField(max_length=255, pk=True)
owner = fields.CharField(max_length=36)
class Domain(Model):
id = fields.CharField(max_length=255, pk=True)
tld: ForeignKeyFieldInstance[TLD] = fields.ForeignKeyField('models.TLD', 'domains')
expiry = fields.DatetimeField(null=True)
owner = fields.CharField(max_length=36)
token_id = fields.BigIntField(null=True)
tld_id: Optional[str]
class Record(Model):
id = fields.CharField(max_length=255, pk=True)
domain: ForeignKeyFieldInstance[Domain] = fields.ForeignKeyField('models.Domain', 'records')
address = fields.CharField(max_length=36, null=True)
See the links below to learn how to use this library.
Limitations
Some limitations are applied to model names and fields to avoid ambiguity in GraphQL API.
- Table names must be in
snake_case
- Model fields must be in
snake_case
- Model fields must differ from table name