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])
Ça ne marche pas. Comment puis-je INSÉRER ou METTRE À JOUR new
dans la table Toner
? Je soupçonne que c'est fait avec la fusion, mais je ne comprends pas comment faire cela.
en supposant que certains noms de colonne ...
INSÉRER un
newToner = Toner(toner_id = 1,
toner_color = 'blue',
toner_hex = '#0F85FF')
dbsession.add(newToner)
dbsession.flush()
INSÉRER plusieurs
newToner1 = Toner(toner_id = 1,
toner_color = 'blue',
toner_hex = '#0F85FF')
newToner2 = Toner(toner_id = 2,
toner_color = 'red',
toner_hex = '#F01731')
dbsession.add_all([newToner1, newToner2])
dbsession.flush()
[~ # ~] mise à jour [~ # ~]
q = dbsession.query(Toner)
q = q.filter(Toner.toner_id==1)
record = q.one()
record.toner_color = 'Azure Radiance'
dbsession.flush()
ou en utilisant une doublure fantaisie en utilisant FUSIONNER
record = dbsession.merge(Toner( **kwargs))
J'essaie de nombreuses façons et finalement j'essaye ceci:
def db_persist(func):
def persist(*args, **kwargs):
func(*args, **kwargs)
try:
session.commit()
logger.info("success calling db func: " + func.__name__)
return True
except SQLAlchemyError as e:
logger.error(e.args)
session.rollback()
return False
return persist
et :
@db_persist
def insert_or_update(table_object):
return session.merge(table_object)