En Python, en utilisant SQLAlchemy, je veux insérer ou mettre à jour une ligne. J'ai essayé ceci :
existing = db.session.query(Toner)
for row in data:
new = Toner(row[0], row[1], row[2])
Cela ne fonctionne pas. Comment puis-je INSÉRER ou METTRE À JOUR new
en Toner
table ? Je soupçonne que c'est fait avec la fusion, mais je ne comprends pas comment faire.
3 votes
Il n'y a pas d'insertion ou de mise à jour en SQL (standard). Vous devrez récupérer et mettre à jour manuellement les objets existants, puis insérer ceux qui n'existent pas encore. Sinon, vous devrez contourner l'ORM et émettre manuellement votre SQL dépendant du backend.
1 votes
@Ferdinand Beyer Ne serait-ce pas session.merge() ( sqlalchemy.org/docs/orm/session.html#merging ) fonctionne dans mon cas ?
3 votes
session.merge()
fait quelque chose de complètement différent : il ajoute un objet à la session qui provient d'une autre session. Par exemple, s'il y a un objet avec l'ID 42,session.merge()
va chercher une ligne pour l'ID 42 dans la base de données, et retournera un nouvel objet qui représente la même ligne de la base de données. Cela n'a rien à voir avecINSERT
oUPDATE
.1 votes
Votre exemple de code est déroutant : il montre que votre retrieve
Toner
de la base de données, ce qui signifie qu'ils existent déjà ; ensuite, vous essayez de créer des objetsToner
à nouveau avec les mêmes champs. Veuillez développer votre exemple en un exemple plus réaliste.0 votes
Pourriez-vous modifier la réponse acceptée puisqu'elle n'a que des downvotes et que votre commentaire montre qu'elle ne vous a pas aidé ?
0 votes
INSERT ou UPDATE peuvent être effectués, mais une mise en œuvre efficace dépend de la base de données SQLAlchemy sous-jacente. C'est différent pour MySQL et PostgreSQL.