91 lines
3.5 KiB
Python
Executable File
91 lines
3.5 KiB
Python
Executable File
"""
|
|
Copyright (c) 2020 Sdj Geek
|
|
Voir le fichier LICENSE
|
|
|
|
Classe d'accès aux données INSEE dans la base SQLite
|
|
|
|
"""
|
|
|
|
import os
|
|
import peewee
|
|
|
|
|
|
# Objet de connexion à la base
|
|
database = peewee.SqliteDatabase(None)
|
|
|
|
|
|
class BddInsee:
|
|
"""Classe encapsulant les accès aux données.
|
|
|
|
"""
|
|
|
|
def __init__(self, chemin_base_donnees):
|
|
"""Initialisation
|
|
|
|
:param chemin_base_donnees: chemin vers le fichier SQLite
|
|
|
|
"""
|
|
new = not os.path.isfile(chemin_base_donnees)
|
|
database.init(chemin_base_donnees)
|
|
if new:
|
|
database.create_tables([self.Person])
|
|
|
|
class Person(peewee.Model):
|
|
"""Classe représentant une personne dans la base
|
|
|
|
"""
|
|
last_name = peewee.CharField()
|
|
first_name = peewee.CharField()
|
|
is_woman = peewee.BooleanField()
|
|
annee_naissance = peewee.IntegerField()
|
|
mois_naissance = peewee.IntegerField()
|
|
jour_naissance = peewee.IntegerField()
|
|
code_lieu_naissance = peewee.CharField()
|
|
commune_naissance = peewee.CharField()
|
|
pays_naissance = peewee.CharField()
|
|
annee_deces = peewee.IntegerField()
|
|
mois_deces = peewee.IntegerField()
|
|
jour_deces = peewee.IntegerField()
|
|
code_lieu_deces = peewee.CharField()
|
|
numero_act_deces = peewee.CharField()
|
|
|
|
class Meta:
|
|
database = database
|
|
|
|
def find_person(self, first_name, last_name, maiden_name, annee_naissance, mois_naissance, jour_naissance):
|
|
"""Rechercher une personne dans la base
|
|
|
|
:param first_name: prénom de la personne à rechercher
|
|
:param last_name: nom de famille de la personne à rechercher
|
|
:param maiden_name: nom de jeune fille de la personne à rechercher (None si non défini)
|
|
:param annee_naissance: année de naissance de la personne à rechercher
|
|
:param mois_naissance: mois de naissance de la personne à rechercher
|
|
:param jour_naissance: jour de naissance de la personne à rechercher
|
|
:returns: liste contenant un dictionnaire par personne trouvée
|
|
|
|
"""
|
|
if maiden_name:
|
|
return self.Person.select().where((self.Person.annee_naissance == int(annee_naissance))
|
|
& (self.Person.mois_naissance == int(mois_naissance))
|
|
& (self.Person.jour_naissance == int(jour_naissance))
|
|
& (self.Person.first_name.contains(first_name.upper()))
|
|
& ((self.Person.last_name.contains(last_name.upper()))
|
|
| self.Person.last_name.contains(maiden_name.upper())))
|
|
else:
|
|
return self.Person.select().where((self.Person.annee_naissance == int(annee_naissance))
|
|
& (self.Person.mois_naissance == int(mois_naissance))
|
|
& (self.Person.jour_naissance == int(jour_naissance))
|
|
& (self.Person.first_name.contains(first_name.upper()))
|
|
& (self.Person.last_name.contains(last_name.upper())))
|
|
|
|
def import_data_list(self, data_list):
|
|
"""Insérer des données dans la base
|
|
|
|
:param data_list: liste de dictionnaires contenant les
|
|
informations à insérer
|
|
|
|
"""
|
|
with database.atomic():
|
|
for batch in peewee.chunked(data_list, 70):
|
|
self.Person.insert_many(batch).execute()
|