Nota: gli sviluppatori che creano nuove applicazioni sono vivamente consigliati per l'utilizzo della libreria client di NDB, che presenta diversi vantaggi rispetto a questa libreria client, come la memorizzazione automatica delle cache tramite l'API Memcache. Se attualmente utilizzi la libreria client DB precedente, leggi la Guida alla migrazione da database a NDB
La classe Espandio è una superclasse per le definizioni dei modelli di dati le cui proprietà sono determinate in modo dinamico. Un modello Espandio può avere una combinazione di proprietà fisse simili a quelle di Modello e proprietà dinamiche assegnate a un'entità in fase di esecuzione.
Expando
è fornito dal modulo google.appengine.ext.db
.
Espandi è una sottoclasse di Model ed eredita i metodi della classe e dell'istanza da quella classe. La classe Espandio non definisce né sostituisce alcun metodo.
Introduzione
Un modello espandibile può avere proprietà fisse e proprietà dinamiche. Le proprietà fisse si comportano in modo simile alle proprietà di un modello e vengono definite in modo simile nella classe del modello Espansione utilizzando gli attributi della classe. Le proprietà dinamiche vengono create quando vengono assegnati valori all'istanza. Due istanze della stessa classe Espandio possono avere insiemi diversi di proprietà dinamiche e possono anche avere proprietà dinamiche con lo stesso nome, ma tipi diversi. Le proprietà dinamiche sono sempre facoltative e non hanno un valore predefinito: non esistono finché non viene loro assegnato un valore.
Le proprietà dinamiche non possono utilizzare le istanze della proprietà per eseguire la convalida, impostare i valori predefiniti o applicare la logica automatica ai valori. Le proprietà dinamiche archiviano semplicemente i valori dei tipi di datastore supportati. Consulta Tipi e classi di proprietà.
Inoltre, a differenza delle proprietà fisse, le proprietà dinamiche non possono utilizzare un nome diverso per l'attributo classe e il nome della proprietà datastore. Consulta la sezione Nomi delle proprietà non consentiti.
Suggerimento: se vuoi convalidare un valore di proprietà dinamica utilizzando una classe Property, puoi creare un'istanza della classe Property e richiamare il metodo validate() sul valore.
Una sottoclasse di espansione può definire proprietà fisse simili a una classe Model. Le proprietà fisse di un'espansione si comportano in modo simile alle proprietà di un modello. Un'istanza di espansione può avere proprietà fisse e dinamiche.
import datetime from google.appengine.ext import db class Song(db.Expando): title = db.StringProperty() crazy = Song(title='Crazy like a diamond', author='Lucy Sky', publish_date='yesterday', rating=5.0) hoboken = Song(title='The man from Hoboken', author=['Anthony', 'Lou'], publish_date=datetime.datetime(1977, 5, 3)) crazy.last_minute_note=db.Text('Get a train to the station.')
Le proprietà dinamiche (non fisse) di un'istanza Espandio possono essere eliminate. Per eliminare una proprietà dinamica, un'applicazione elimina l'attributo dell'istanza:
del crazy.last_minute_note
Costruttore
Il costruttore della classe Espandio viene definito come segue:
- class Expando(parent=Nessuno, key_name=None, **kwds)
-
Una classe del modello le cui proprietà non devono essere definite nel corso prima dell'uso. Come nel caso di Model, la classe Espandio deve essere sottoclasse per definire il tipo di entità dei dati.
Espandio è una sottoclasse di Model ed eredita o sostituisce i metodi.
Argomenti
- principale
- L'istanza modello o l'istanza chiave dell'entità che è la nuova entità principale.
- nome_chiave
-
Il nome della nuova entità. Il nome diventa parte della chiave primaria. Se
None
, per la chiave viene utilizzato un ID generato dal sistema.Il valore di key_name non deve iniziare con un numero e non deve essere nel formato
__*__
. Se la tua applicazione utilizza i dati inviati dagli utenti come nomi di chiavi delle entità del datastore (ad esempio un indirizzo email), l'applicazione deve purificare il valore, ad esempio facendolo precedere da una stringa nota come "key:", per soddisfare questi requisiti.key_name
viene archiviato come stringa Unicode, con valoristr
convertiti in testo ASCII. - **kwd
- Valori iniziali per le proprietà dell'istanza, come argomenti della parola chiave. Ogni nome corrisponde a un attributo della nuova istanza e può corrispondere a proprietà fisse definite nella classe Espandi oppure può essere proprietà dinamica.