Type Mapping¶
OpenAlchemy translates OpenAPI types to SQLalchemy types using the following mappings:
OpenAPI type |
OpenAPI format |
SQLAlchemy type |
Python type |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type as an array is supported, however, exactly one type (other than
null) is required.
String¶
OpenAPI optionally allows the maxLength property for strings. This is
translated to the length argument for the SQLAlchemy String, which is set
to None if maxLength is undefined.
Password¶
The same maxLength information as for String also applies.
Note
The password format under the hood is the same as String. No
special protection (such as encryption) is added.
Byte¶
This format is for base64 encoded binary data. The same maxLength
information as for String also applies.
Binary¶
The same maxLength information as for String also applies. The codec is
assumed to be utf-8.
DateTime¶
OpenAPI supports the inbuilt date-time format for a string. This is mapped
to the DateTime SQLAlchemy type. Currently, time zones are not supported.
Database best practice is to store everything in UTC. Applications, such as web
front ends, should convert to UTC as early as possible and localize a date and
time as late as possible.
JSON¶
SQLAlchemy supports generic data through the JSON type. OpenAlchemy
supports this through adding the x-json extension property to any
property of a model. This means that OpenAlchemy will ignore the true type of
the property and instead create a JSON column. For example, the data
property of the following Employee object is a generic JSON data store:
1 2 3 4 5 6 7 8 9 | Employee:
type: object
x-tablename: employee
properties:
id:
type: integer
data:
type: object
x-json: True
|
Note
If you are using the SQLAlchemy ORM do not use a JSON property as the primary key. This is technically valid although the unique identification logic in SQLAlchemy does not support this.
See also
- SQLAlchemy JSON
Documentation for the SQLAlchemy JSON type.