digikuery is a script to perform queries in digikam (photo manager) database.
It can
- Query albums which contains tags matching a given regex
- Query most used tags and corresponding albums
- Print other tags present in matching albums
- List digikam database structure
- Provide an interactive python shell for manual queries
usage: digikuery.py [-h] [-d DBPATH] [-F] [-R ROOT] [-T [FILTER_TAGS]] {shell,schema,album,tag,stats} ...
digikuery - Digikam database query tool - v20230529
positional arguments:
{shell,schema,album,tag,stats}
shell spawn ipython shell to explor digikam database
schema dump digikam database schema
album [album] list tags for one or all albums
tag [tag] list all tags or query single tag
-C sort by result count
-I show image details
stats show digikam database statistics (default)
options:
-h, --help show this help message and exit
-d DBPATH, --dbpath DBPATH
database path
-F, --full-tagname display full tag name
-R ROOT, --root ROOT restrict query to this root album
-T [FILTER_TAGS], --filter-tags [FILTER_TAGS]
show and filter tags for displayed albums
examples:
List albums when tag 'Paquerette' is present, together with other tags of this album
$ digikuery tag Paquerette
$ pip install digikuery
Bellow we look for the "semaphore" name in all tags.
The query returns 2 tags "TagCommunication/Semaphore/Bleu" and "TagAlphabet/Semaphore", listing for each tag the albums containing tagged pictures.
$ digikuery tag semaphore
3 TagCommunication/Semaphore/Bleu
album_albanie
album_france
album_grece
1 TagAlphabet/Semaphore
album_photos_19e_siecle
Providing -I option would list the picture names.
Let's just sort them by picture count:
$ digikuery tag -C semaphore
3 TagCommunication/Semaphore/Bleu
3 album_france
2 album_grece
2 album_albanie
1 TagAlphabet/Semaphore
19 album_photos_19e_siecle
For each matching album we can show if it contains other tags, for example tags maching "access"
$ digikuery -T access tag semaphore
3 TagCommunication/Semaphore/Bleu
album_france
TagAccess/Walking (9), TagAccess/Train(1)
album_grece
TagAccess/Car(6), TagAccess/Walking (3)
album_albanie
TagAccess/Walking (5)
$ digikuery shell
Interactive mode help:
available objects
dk.session
dk.session.query(Album).count()
dk.session.query(AlbumRoot).all()
dk.session.query(Image).filter(Image.name == 'example.png').all()
dk.session.query(Album, Tag, sqlalchemy.func.count(Tag.name)).join(imagetag).join(Image).join(Album)
dk.engine
access sqlalchemy engine
dk.metadata
access sqlalchemy metadata
available functions
help()
print this message
dk.query_album(album)
dk.query_tag(tag)
dk.schema()
dk.stats()
running ipython...
In [1]:
digikuery uses sqlalchemy to map digikam database to python objects.