Einzelnen Beitrag anzeigen
  #9  
Alt 13.12.2020, 20:34
sonki sonki ist offline
Erfahrener Benutzer
 
Registriert seit: 10.05.2018
Beiträge: 2.916
Standard

Hallo,

Zitat:
Mir ging es aber eigentlich darum, die Änderung direkt in die eigene Datenbank zu schreiben. Mit Python sollte sowas doch möglich sein, oder nicht?
prinzipiell kann man es mit Python direkt in die Datenbank schreiben.
Ausgehend von diesem Thread: https://forum.ahnenforschung.net/sho...=195159&page=3 mal mein Versuch.

Jemand der sich mit dem Gramps-Code auskennt werden sich vermutlich die Zehennägel hochstellen, aber bei einem schnellen Test hat es bei mir funktioniert. Wobei ich pro Person ein Religion-"Ereignis" erstellen und es dann mit der Person verknüpfe. Vermutlich ginge es auch, wenn man ein einziges Ereignis erstellt und das dann fortlaufend mit den entsprechenden Personen verknüpft.
Aber das kann man ja sehr leicht mit untenstehendem Code einstellen.

POC-Code (in rot die variablen Werte):
Code:
import sys
import os
import sqlite3

os.environ['GRAMPS_RESOURCES'] = 'C:/Users/<USERNAME>/AppData/Local/GrampsAIO64-5.1.3/share'
sys.path.append(r'C:\Users\<USERNAME>\AppData\Local\GrampsAIO64-5.1.3')

from gramps.gen.dbstate import DbState
from gramps.plugins.db.dbapi import sqlite
from gramps.gen.lib import Event, EventType, EventRef
from gramps.gen.db.txn import DbTxn

db = sqlite.SQLite('C:/Users/<USERNAME>/AppData/Roaming/gramps/grampsdb/5f81f8ee')

for person_handle in db.get_person_handles():
    transaction = DbTxn('msg', db)
    person = db.get_person_from_handle(person_handle)
    serialized = person.serialize()
    if '<FN>' in str(serialized):
        db.transaction_commit(transaction)
        event = Event()
        event.set_type(EventType(41))
        event.set_description('evangelisch')
        gramps_id = db.add_event(event, transaction)
        db.transaction_commit(transaction)
        eventRef = EventRef()
        eventRef.set_reference_handle(gramps_id)
        person.add_event_ref(eventRef)
        db.add_person(person, transaction)
        db.transaction_commit(transaction)

db.close()
Obiger Code liest alle Personen aus der DB und geht in einer Schleife all diese Personen nach und nach durch und erstellt für alle Personen mit <FN> ein "Religion-Event", setzt einen Wert ("evangelisch") und verknüft es mit der Person. Auf ein Datum/Ort für das Event habe ich mal verzichtet.

Ach ja: Nutzung auf eigene Gefahr - ist schnell zusammengebastelter Code und mein Verständnis über die Gramps-API/Code ist minimal.

Geändert von sonki (13.12.2020 um 20:37 Uhr)
Mit Zitat antworten