db export to make files smaller

This commit is contained in:
q
2015-07-09 07:54:14 +03:00
parent 8b401f2b42
commit e08b674703

View File

@@ -33,6 +33,8 @@ def setup_options():
help="Depth of summarization for --du.") help="Depth of summarization for --du.")
parser.add_argument("--exportDesc",action="store",dest="export_descriptions",default=None, parser.add_argument("--exportDesc",action="store",dest="export_descriptions",default=None,
help="Walk through folders, and write "+DESCFILE+" in each folder. Format descriptions with {desc} {width}x{height} {red} {green} {blue} {Bred} {Bgreen} {Bblue} {size} {date} {name} {tags}") help="Walk through folders, and write "+DESCFILE+" in each folder. Format descriptions with {desc} {width}x{height} {red} {green} {blue} {Bred} {Bgreen} {Bblue} {size} {date} {name} {tags}")
parser.add_argument("--export",action="store",dest="exportfile",default=None,
help="Export database to new sqlite database.")
parser.add_argument("-f",action="store",dest="sqlfile",default=SQLFILE, parser.add_argument("-f",action="store",dest="sqlfile",default=SQLFILE,
help="SQL file name to use [%(default)s]") help="SQL file name to use [%(default)s]")
parser.add_argument("-i",action="store",dest="importfile",default=None, parser.add_argument("-i",action="store",dest="importfile",default=None,
@@ -85,7 +87,8 @@ def setup_options():
options.diskused: options.diskused:
options.add=not options.add options.add=not options.add
if options.tag or\ if options.tag or\
options.importfile: options.importfile or\
options.exportfile:
options.add=False options.add=False
return options return options
@@ -98,8 +101,8 @@ def createdb(sqlfile):
width INTEGER,height INTEGER,\ width INTEGER,height INTEGER,\
fingerprint TEXT,sharpness NUMERIC,\ fingerprint TEXT,sharpness NUMERIC,\
R REAL,G REAL, B REAL, BR REAL, BG REAL, BB REAL)') R REAL,G REAL, B REAL, BR REAL, BG REAL, BB REAL)')
db.execute('CREATE TABLE list (file TEXT,hash TEXT,date INTEGER,size INTEGER)') db.execute('CREATE TABLE list (file TEXT PRIMARY KEY,hash TEXT,date INTEGER,size INTEGER)')
db.execute('CREATE TABLE tags (tag TEXT,hash TEXT)') db.execute('CREATE TABLE tags (hash TEXT PRIMARY KEY,tag TEXT)')
conn.commit() conn.commit()
return return
@@ -957,6 +960,25 @@ def import_metadata(options):
print("Imported %d metadata, %d tags." % (count,tagsafter-tagsbefore)) print("Imported %d metadata, %d tags." % (count,tagsafter-tagsbefore))
def export_database(options):
""" export data to new sqlite file. Minimize file size of sqlite."""
if not os.path.exists(options.exportfile):
createdb(options.exportfile)
conn=sqlite3.connect(options.sqlfile)
conn.text_factory=str
db=conn.cursor()
db.execute("ATTACH ? as toDB", (options.exportfile, ))
db.execute("INSERT OR REPLACE INTO toDB.list SELECT * FROM main.list")
db.execute("INSERT OR REPLACE INTO toDB.data SELECT * FROM main.data")
db.execute("INSERT OR IGNORE INTO toDB.tags SELECT * FROM main.tags")
conn.commit()
count=db.execute("SELECT COUNT(hash) FROM toDB.list").fetchall()[0][0]
metacount=db.execute("SELECT COUNT(hash) FROM toDB.data").fetchall()[0][0]
tagscount=db.execute("SELECT COUNT(hash) FROM toDB.tags").fetchall()[0][0]
print("Exported %d files, %d metadata, %d tags." % (count,metacount,tagscount))
def check_path(path,opt): def check_path(path,opt):
""" return relative path name to DB if real path doesnt exist """ """ return relative path name to DB if real path doesnt exist """
if os.path.isfile(path): if os.path.isfile(path):
@@ -1036,6 +1058,9 @@ def main():
if options.importfile: if options.importfile:
print("Importing metadata") print("Importing metadata")
import_metadata(options) import_metadata(options)
if options.exportfile:
print("Exporting database")
export_database(options)
if options.import_descriptions: if options.import_descriptions:
print("Import descriptions") print("Import descriptions")
import_descriptions(options) import_descriptions(options)