Below is a List of Limitations for features that are supported in Spanner but are not supported in the Django Spanner library. Some features have been disabled because of compatibility issues using the Django feature toggle.
Django automatically manages query generation and thus does not expose methods to add query hints directly. While libraries can add support for this feature and manage the query generation part, we have not added this because of the added complexity. The workaround to use this feature is by using Raw Queries directly, and adding Query hints there.
Mutations are not a concept that is understood by Django so it does not support it inherently. The workaround is to use python-spanner objects and run Mutations using that.
Migrations (creation and updation) of tables in Django are sequential operations. Django doesn't inherently support doing batch DDL operations. However, customers can use python-spanner objects to run batch DDL for unmanaged tables in Django.
Stale Reads are not a concept that is understood by Django so it does not support it inherently. The workaround is to use python-spanner objects and run read operations on snapshots.
Interleaving is not a concept that is understood by Django so it does not support it inherently. The workaround is to use Unmanaged tables and python-spanner objects to create and manage interleaved tables.
Partitioned DML is not a concept that is understood by Django so it does not support it inherently. The workaround is to use python-spanner objects to perform partitioned DML operations.
Django does not support session pools for databases directly and does not have the concept of session labeling itself. The workaround is to use python-spanner objects to create and manage sessions along with Session labels.
Request Priority for database calls is not a concept that is understood by Django so it does not support it inherently. The workaround is to use python-spanner objects and use request priority as part of the db calls.
Tagging for database calls is not a concept that is understood by Django so it does not support it inherently. The workaround is to use python-spanner objects and use the tagging feature via that.
Configuring Leader Option for database calls is not a concept that is understood by Django so it does not support it inherently. The workaround is to use python-spanner objects while creating the database.
Backups for databases are not managed by Django so it does not support it inherently. In general, none of the Spanner ORMs / drivers are expected to support backup management. The workaround is to use python-spanner objects and use backup features via that.
Instances for spanner are not managed by Django so it does not support it inherently. The workaround is to use python-spanner objects and use Instance config features via that.
Features | Is a workaround available? |
---|---|
Query Hints | Raw Queries can be used for Query hints Link. |
Mutations | Python-spanner database objects can be used to run Mutation queries. Link. |
Batch DDL | Using unmanaged tables in Django. Link and Directly using Python spanner objects to execute batch DDL statements. Link. |
Stale Reads | Python-spanner database objects can be used to perform stale reads. Link. |
Interleaving | Using unmanaged tables in Django. Link and Directly using Python spanner objects to create interleaved tables. Link. |
Partitioned DML | Python-spanner database objects can be used to perform Partitioned DML. Link. |
Session Labeling | Python-spanner connection objects can be used to perform Session creation and labeling . Link. |
Request Priority | Python-spanner connection objects can be used to make backend calls with request priority. Link. |
Tagging | Python-spanner connection objects can be used to make backend calls with request tags. Link. |
Configurable Leader Option | Python-spanner database objects can be used to set or update leader options. Link. |
Cross region backup | Python-spanner library can be used to perform db backups across regions. Link. |
Custom Instance Config | Python-spanner library can be used to manage instances. Link. |