Ga naar inhoud

interne structuur

Naast de speciale parameters (tabelnamen, metadata, enz.) die tijdens de definitie in het model zijn gedefinieerd, biedt het model u ook nuttige interne structuren.

driehoek model

Alle modelklassen erven van Pydantic. BaseModel, zodat u toegang heeft tot alle normale eigenschappen van Pydantic-modellen.

Als u bijvoorbeeld een Pydantisch modelveld wilt weergeven, kunt u:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import databases
import ormar
import sqlalchemy

database = databases.Database("sqlite:///db.sqlite")
metadata = sqlalchemy.MetaData()


class Course(ormar.Model):
    ormar_config = ormar.OrmarConfig(
        database=database,
        metadata=metadata,
    )

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)
    completed: bool = ormar.Boolean(default=False)


print(Course.model_fields)
"""
Will produce:
{'id':        Field(name='id', 
                         type=Optional[int], 
                         required=False, 
                         default=None),
 'name':      Field(name='name', 
                         type=Optional[str], 
                         required=False, 
                         default=None),
'completed':  Field(name='completed', 
                         type=bool, 
                         required=False, 
                         default=False)}
"""

!!!Tip Houd er rekening mee dat het veld met de primaire sleutel-id optioneel is, omdat de primaire sleutels van het gehele getal standaard zijn ingesteld op Waar in automatische verhoging.

!!!Info Ga voor meer opties naar de officiële Pydantic documentatie.

Alchemy Horloge

Om toegang te krijgen tot de automatisch gemaakte sqlalchemy-tabel, kunt u de Model.ormar\ _ config gebruiken

Als u bijvoorbeeld een tabelkolom wilt weergeven, kunt u:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import databases
import ormar
import sqlalchemy

DATABASE_URL = "sqlite:///test.db"

ormar_base_config = ormar.OrmarConfig(
    database=databases.Database(DATABASE_URL), metadata=sqlalchemy.MetaData()
)


class Course(ormar.Model):
    ormar_config = ormar.OrmarConfig(
        tablename="courses",
        database=databases.Database(DATABASE_URL),
        metadata=sqlalchemy.MetaData(),
    )

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)
    completed: bool = ormar.Boolean(default=False)


print(Course.ormar_config.table.columns)
"""
Will produce:
ImmutableColumnCollection(courses.id, courses.name, courses.completed)
"""

!!!Tip U hebt toegang tot de tabel primaire sleutelnaam in Course.ormar\ _ config

!!!Info Ga voor meer opties naar de officiële sqlalchemistry-metadata documentatie.

veld definitie

Om toegang te krijgen tot het ormar-veld, kunt u het Model.ormar_config.model_fields-bereik gebruiken

Als u bijvoorbeeld tabelmodelvelden wilt weergeven, kunt u:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import pprint

import databases
import ormar
import sqlalchemy

database = databases.Database("sqlite:///db.sqlite")
metadata = sqlalchemy.MetaData()


class Course(ormar.Model):
    ormar_config = ormar.OrmarConfig(
        database=database,
        metadata=metadata,
    )

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)
    completed: bool = ormar.Boolean(default=False)


pprint.pp({x: v.__dict__ for x, v in Course.ormar_config.model_fields.items()})
"""
Will produce:
{'id': {'__type__': <class 'int'>,
        '__pydantic_type__': <class 'int'>,
        '__sample__': 0,
        'related_name': None,
        'column_type': Integer(),
        'constraints': [],
        'name': 'id',
        'db_alias': None,
        'primary_key': True,
        'autoincrement': True,
        'nullable': True,
        'sql_nullable': False,
        'index': False,
        'unique': False,
        'virtual': None,
        'is_multi': None,
        'is_relation': None,
        'is_through': False,
        'through_relation_name': None,
        'through_reverse_relation_name': None,
        'skip_reverse': False,
        'skip_field': False,
        'owner': <class '__main__.Course'>,
        'to': None,
        'to_pk_only': None,
        'through': None,
        'self_reference': False,
        'self_reference_primary': None,
        'orders_by': None,
        'related_orders_by': None,
        'encrypt_secret': None,
        'encrypt_backend': <EncryptBackends.NONE: 0>,
        'encrypt_custom_backend': None,
        'ormar_default': None,
        'server_default': None,
        'comment': None,
        'represent_as_base64_str': False,
        'minimum': None,
        'maximum': None,
        'multiple_of': None,
        'ge': None,
        'le': None},
 'name': {'__type__': <class 'str'>,
          '__pydantic_type__': <class 'str'>,
          '__sample__': 'string',
          'related_name': None,
          'column_type': String(length=100),
          'constraints': [],
          'name': 'name',
          'db_alias': None,
          'primary_key': False,
          'autoincrement': False,
          'nullable': False,
          'sql_nullable': False,
          'index': False,
          'unique': False,
          'virtual': None,
          'is_multi': None,
          'is_relation': None,
          'is_through': False,
          'through_relation_name': None,
          'through_reverse_relation_name': None,
          'skip_reverse': False,
          'skip_field': False,
          'owner': <class '__main__.Course'>,
          'to': None,
          'to_pk_only': None,
          'through': None,
          'self_reference': False,
          'self_reference_primary': None,
          'orders_by': None,
          'related_orders_by': None,
          'encrypt_secret': None,
          'encrypt_backend': <EncryptBackends.NONE: 0>,
          'encrypt_custom_backend': None,
          'ormar_default': None,
          'server_default': None,
          'comment': None,
          'represent_as_base64_str': False,
          'max_length': 100,
          'min_length': None,
          'regex': None},
 'completed': {'__type__': <class 'bool'>,
               '__pydantic_type__': <class 'bool'>,
               '__sample__': True,
               'related_name': None,
               'column_type': Boolean(),
               'constraints': [],
               'name': 'completed',
               'db_alias': None,
               'primary_key': False,
               'autoincrement': False,
               'nullable': True,
               'sql_nullable': True,
               'index': False,
               'unique': False,
               'virtual': None,
               'is_multi': None,
               'is_relation': None,
               'is_through': False,
               'through_relation_name': None,
               'through_reverse_relation_name': None,
               'skip_reverse': False,
               'skip_field': False,
               'owner': <class '__main__.Course'>,
               'to': None,
               'to_pk_only': None,
               'through': None,
               'self_reference': False,
               'self_reference_primary': None,
               'orders_by': None,
               'related_orders_by': None,
               'encrypt_secret': None,
               'encrypt_backend': <EncryptBackends.NONE: 0>,
               'encrypt_custom_backend': None,
               'ormar_default': False,
               'server_default': None,
               'comment': None,
               'represent_as_base64_str': False}}
"""

!!!Info Merk op dat de velden die op het model zijn opgeslagen klassen zijn, geen instanties.

1
2
3
4
5
6
7
Dus als u alleen modelvelden afdrukt, krijgt u:

`{'id': <class 'ormar.fields.model_fields.Integer'>, `

  `'name': <class 'ormar.fields.model_fields.String'>, `

  `'completed': <class 'ormar.fields.model_fields.Boolean'>}`