The Orator ORM provides a simple yet beautiful ActiveRecord implementation.
Geben Sie das Verzeichnis und die Datenbank an. Derzeit werden drei DBs unterstützt: PostgreSQL, MySQL und SQLite. Legen Sie Treiber, Benutzer (DB-Benutzer), Kennwort (DB-Kennwort), Datenbank (DB-Speicherort) usw. fest. Im Fall von SQLite kann dies beispielsweise wie folgt definiert werden.
DATABASES = {
'development': {
'driver': 'sqlite',
'database': '/tmp/authgate.sqlite'
}
}
Sie können eine Instanz von DatabaseManager erstellen und mit dieser Instanz auf die Datenbank zugreifen. Übergeben Sie die DB-Definition beim Erstellen einer Instanz.
from orator import DatabaseManager
DATABASES = {
'development': {
'driver': 'sqlite',
'database': '/tmp/authgate.sqlite'
}
}
db = DatabaseManager(DATABASES)
Sie können DB mit Schema Builder bearbeiten. Erstellen Sie eine Schema-Instanz, indem Sie eine Instanz von DatabaseManager übergeben. Verwenden Sie danach die Schema-Instanz, um die Methode aufzurufen, die der Spalte der Tabelle entspricht, die Sie definieren möchten.
create-database.py
from orator import DatabaseManager
from orator import Schema
DATABASES = {
'development': {
'driver': 'sqlite',
'database': '/tmp/authgate.sqlite'
}
}
db = DatabaseManager(DATABASES)
schema = Schema(db)
with schema.create('samples') as table:
table.increments('id')
table.string('string_column').nullable()
table.integer('integer_column')
Wenn die oben erstellte Datei ausgeführt wird, wird eine auf der Definition basierende Datenbank erstellt.
$ python create-database.py
Weitere Informationen finden Sie im Abschnitt Schema Builder von Orator. http://orator.readthedocs.org/en/latest/schema_builder.html)を参照。
Erstellen Sie, indem Sie die Model-Klasse von Orator erben. Das folgende Beispiel ist eine Klasse, die der Tabelle ** samples ** mit zwei Spalten zugeordnet ist, ** string_column ** und ** integer_column **, die zuvor erstellt wurden.
class Sample(Model):
__table__ = 'samples'
__fillable__ = ['string_column']
__guarded__ = ['integer_column']
__fillable__
und __guarded__
Verwenden Sie es ordnungsgemäß, je nachdem, ob eine Massenzuweisung zulässig ist oder nicht. Eine Massenzuweisung ist für in __guarded__
definierte Parameter nicht zulässig.
Wenn Sie die Massenzuweisung nicht für alle Attribute zulassen möchten, können Sie wie folgt schreiben.
class AllBlockSample(Model):
__table__ = 'samples'
__guarded__ = ['*']
In Orator gibt es verschiedene Eigenschaften, die durch "__ Eigenschaftsname __" dargestellt werden. Manchmal kann dies nur durch Festlegen der Eigenschaften erreicht werden, sodass Sie sich anscheinend freuen, wenn Sie es lesen. Unten ist ein Beispiel dafür.
__hidden__
Eigenschaft **Betrachten Sie das folgende Modell als Beispiel.
class User(Model):
__table__ = 'user'
__fillable__ = ['login_id', 'password', 'name']
__guarded__ = ['access_token']
__hidden__ = ['password', 'access_token']
Orator bietet eine dedizierte Methode zum Auflisten der Eigenschaften einer Klasse.
to_json ()
: json-Formatseliarize ()
: WörterbuchformatDiejenigen, die auf "hidden" gesetzt sind, werden bei Verwendung der obigen Methode nicht angezeigt. Im Beispiel der Benutzerklasse werden nur die Anmelde-ID und der Name angezeigt (ID ist ** PRIMARY KEY **). Natürlich gelten die Effekte von "hidden" nicht für die Standard-Python "__dict __" und "vars ()".
__timestamp__
Eigenschaft **Standardmäßig generiert Orator automatisch Spalten, in denen die Erstellungszeit der Tabelle (** created_at ) und die Aktualisierungszeit ( update_at **) aufgezeichnet werden. Wenn Sie nicht automatisch generieren möchten, fügen Sie __timestamps__ = False
hinzu.
class SampleModel(Model):
__table__ = 'samples'
__timestamps__ = False
Sie können es mit save () oder create () speichern.
sample_model = SampleModel()
sample_model.string_column = "test"
sample_model.integer_column = 100
sample_model.save()
sample_model = SampleModel.create(string_column='test')
Sie können den Parameter __guarded__
nicht als zu erstellendes Argument übergeben. Selbst wenn es übergeben wird, wird es ignoriert und der entsprechende Parameter bleibt None.
Wenn beim Erstellen der Model-Klasse "guarded = ['*']" angegeben wird, tritt beim Aufrufen der create-Methode "orator.exceptions.orm.MassAssignmentError" auf.
Die subtilen Unterschiede zwischen save () und create () werden aufgrund mangelnder Forschung nicht verstanden.
Ich habe eine Reihe von Notizen über die Einstellungsmethode und die Klassendefinitionsmethode geschrieben. Ich wollte über "Migration" und "Auswählen / Löschen / Aktualisieren von Abfragen" schreiben, war aber erschöpft. Zu einem anderen Anlass.
Recommended Posts