API de base de données

frappe.db.get_list

frappe.db.get_list(doctype, filters, or_filters, fields, order_by, group_by, start, page_length)

  • Vous pouvez également utiliser l'alias frappe.get_list

Retourne une liste de document d'une table de doctype. Il s'agit d'un habillage pour une requête SELECT. Prend également en compte les autorisations de l'utilisateur de la session.

frappe.db.get_list('Task',
	filters={
		'status': 'Open'
	},
	fields=['subject', 'date'],
	order_by='date desc',
	start=10,
	page_length=20,
	as_list=True
)
# résultat
(('Mettre à jour le branding et le design', '2020-09-04'),
('Documentation manquante', '2020-09-02'),
('Levée de fonds pour la fondation', '2020-09-03'))

# Tâches avec une date après le 08/09/2020
frappe.db.get_list('Task', filters={
	'date': ['>', '2019-09-08']
})

# Tâches avec un sujet contenant le mot "test"
frappe.db.get_list('Task', filters={
	'subject': ['like', '%test%']
})

# Compter le nombre de tâches groupées par statut
frappe.db.get_list('Task',
	fields=['count(name) as count', 'status'],
	group_by='status'
)
# résultat
[{'count': 1, 'status': 'Working'},
 {'count': 2, 'status': 'Overdue'},
 {'count': 2, 'status': 'Open'},
 {'count': 1, 'status': 'Filed'},
 {'count': 20, 'status': 'Completed'},
 {'count': 1, 'status': 'Cancelled'}]

frappe.db.get_all

frappe.db.get_all(doctype, filters, or_filters, fields, order_by, group_by, start, page_length)

  • Vous pouvez également utiliser l'alias frappe.get_all

Identique à frappe.db.get_list mais récupèrera les entrées sans prendre en compte les autorisations de l'utilisateur de la session.

frappe.db.get_value

frappe.db.get_value(doctype, name, fieldname) or frappe.db.get_value(doctype, filters, fieldname)

  • Vous pouvez également utiliser les alias frappe.get_value et frappe.db.get_values

Retourne la valeur d'un champ d'un document ou une liste de valeurs.

# valeur simple
sujet = frappe.db.get_value('Task', 'TASK00002', 'subject')

# valeurs multiples
sujet, description = frappe.db.get_value('Task', 'TASK00002', ['subject', 'description'])

# dictionnaire
task_dict = frappe.db.get_value('Task', 'TASK00002', ['subject', 'description'], as_dict=1)
task_dict.subject
task_dict.description

# avec des filtres, retourne la première entrée correpondant à ces filtres
subject, description = frappe.db.get_value('Task', {'status': 'Open'}, ['subject', 'description'])

frappe.db.get_single_value

frappe.db.get_single_value(doctype, fieldname)

Retourne une valeur de champ d'une type de document unique.

timezone = frappe.db.get_single_value('System Settings', 'timezone')

frappe.db.set_value

frappe.db.set_value(doctype, name, fieldname, value)

  • Vous pouvez également utiliser l'alias frappe.db.update

Renseigne la valeur d'un champ dans la base de donnée, n'appelle par les logiques de l'ORM mais mets à jour l'horodatage modifié (sauf si explicitement contre-indiqué).

# mise à jour de la valeur d'un champ
frappe.db.set_value('Task', 'TASK00002', 'subject', 'New Subject')

# mise à jour de la valeur de plusieurs champ
frappe.db.set_value('Task', 'TASK00002', {
	'subject': 'New Subject',
	'description': 'New Description'
})

# mise à jour dans modifier l'horodatage
frappe.db.set_value('Task', 'TASK00002', 'subject', 'New Subject', update_modified=False)

Cette méthode ne déclenchera les logiques associées à l'ORM comme validate et on_update.
Utilisez cette méthod pour mettre à jour des champs cachés ou si vous êtes certains de ce que vous faites.

frappe.db.exists

frappe.db.exists(doctype, name)

Renvoi true si l'enregistrement existe.

# vérifie si un enregistrement existe grâce à son nom
frappe.db.exists('Task', 'TASK00002') # True

# vérifie si un enregistrement existe grâce à des filtres
frappe.db.exists({
	'doctype': 'Task',
	'status': 'Open',
	'subject': 'New Task'
})

frappe.db.count

frappe.db.count(doctype, filters)

Renvoi le nombre d'enregistrements pour un doctype et des filtres donnés.

# nombre total de Tâches
frappe.db.count('Task')

# nombre total de tâches ouvertes
frappe.db.count('Task', {'status': 'Open'})

frappe.db.delete

frappe.db.delete(doctype, filters)

Supprime un enregistrement d'un doctype correspondant aux filtres passés.

frappe.db.delete('Task', {
	'status': 'Cancelled'
})

frappe.db.commit

frappe.db.commit()

Valide la transaction en cours. Déclenche la requête SQL COMMIT.

Dodock lancera automatiquement frappe.db.commit() à la fin d'une requête web de type POST ou PUT réussie. Par contre elle ne sera pas lancée pour les requêtes GET.

Vous n'avez pas besoin d'appeler cette méthode explicitement la plupart du temps, mais vous pouvez l'appeler pour valider vos transactions en plusieurs fois.

frappe.db.rollback

frappe.db.rollback()

Rollback de la transaction en cours. Déclenche la requête SQL ROLLBACK.

Doock va automatiquement déclencher frappe.db.rollback() si une exception est générée pendant une requête web de type POST ou PUT. Utilisez cette méthode si vous avez besoin de faire un rollback plus tôt dans une transaction.