generalisierte insert into sqlalchemy mit Wörterbuch
Ich Baue eine Anwendung in Fläschchen und ich habe mehrere SQLAlchemy-Modelle definiert. Ich habe ein dictionary mit Schlüssel/Wert-Paare für jedes Modell-Typen.
Möchte ich eine generalisierte einfügen über ein dictionary... würde dies erfordern, einen mapper? Ich weiß, dass wtforms.ext.sqlalchemy.orm.model_form() erzeugt ein Objekt mit populate_obj(Modell), so dass es möglich ist. Ich habe durchkämmt, die Dokumentation, aber kann es nicht finden. Ich kann die commit-später, sondern müssen eine Verknüpfung zum Auffüllen der Gegenstand für jetzt. Bitte, hat jemand Fachwissen?
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy()
db.init_app(app)
employee_data = {'firstname':'John','lastname':'Smith'}
project_data = {'name':'project1'}
dict_generalised_insert(model=Employee,dictionary=employee_data)
dict_generalised_insert(model=Project,dictionary=project_data)
def dict_generalised_insert(model=None,dictionary={})
obj = model.model()
obj.populate_obj(dictionary) # ???
return obj
class Employee(db.Model):
id = db.Column(db.Integer, primary_key=True)
firstname = db.Column(db.String(80))
lastname = db.Column(db.String(80))
class Project(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
- Gibt es einen Grund, warum man nicht einfach erstellen Sie eine Instanz Ihrer model-Klassen und abspeichern?
- Ich bin laden in der via CSV. Ich möchte meine finite-state-Maschine zu sein, so TROCKEN wie möglich.
- Sehe ich nicht wirklich was, dass hat mit dem Modul die Art und Weise es entworfen wurde. Sie können packen Sie Ihre dict in der Modell-Konstruktor und speichern, fügen Sie es von dort, Sie müssen nicht wiederholen, ein code. Wie es bei mir aussieht erstellen Sie code, Dinge zu tun, die das Modul bereits tut.
- Ich bin auf der Suche nach einem Wörterbuch zu Modell hinzufügen setter, ein äquivalent zur populate_obj(Modell) gefunden in wtforms.ext.sqlalchemy.orm ich bin mir nicht sicher, wie Sie Sie zum entpacken ein dict in einer Modell-Konstruktor in einer generalisierten Art und Weise (so, dass das Auspacken dict-zu-Modell funktioniert für beide-Angestellter und Projekt)
obj = Object(**dict)
. Danndb.session.add(obj); db.session.commit()
- vielen Dank, was fehlte, war das ** in **dict
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den idiomatischen Weg zu entpacken, ein Wörterbuch zu verwenden, die Doppel-Stern-operator
**
.Verwenden Sie es mit
flask-sqlalchemy
:Sich bewusst sein, dass die Schlüssel im Wörterbuch entsprechen die Namen der attribute der Klasse. Auspacken, in dieser Art und Weise ist die gleiche wie:
Können Sie dies auch tun, mit einer Liste, wenn Sie definieren ein
__init__
(oder andere Methode) mit positions-Argumente, die Sie jedoch nur mit einem einzigen Stern:Beachten Sie hier die Reihenfolge der Werte ist, was wichtig ist.