Python, easyGUI and sqlite3: Using python to read files in one folder or multiple folder, then adding the folder names and filenames to database

StackOverflow https://stackoverflow.com/questions/8208275

  •  05-03-2021
  •  | 
  •  

Question

I am new in python and am trying to add folder names and text files in those folders to the database. The problem is that i don't know how to add the "textfiles" and "opendirectory" to the database. Please look at this code and help me. Thanks

#!/usr/bin/python

from easygui import *
import sys, glob, os, sqlite3


msgbox("Please choose your folder ","Welcome to MTT", ok_button ="Choose")

opendirectory = diropenbox("Welcome", "MTT",None)


con = sqlite3.connect('test.db')
cur = con.cursor()
cur.execute('DROP TABLE IF EXISTS folder')
cur.execute('DROP TABLE IF EXISTS file')
cur.execute('CREATE TABLE folder( folderid INTEGER PRIMARY KEY, foldername   VARCHAR(120))')
cur.execute('CREATE TABLE file( fileid INTEGER PRIMARY KEY, folderid INTEGER, dataname VARCHAR(120), FOREIGN KEY(folderid) REFERENCES foldername(folderid))')
con.commit()


def main():

    for dirpath,dirnames,filenames in os.walk(opendirectory):

        for textfiles in filenames:

            print textfiles
            print opendirectory
            cur.execute ('INSERT INTO folder (folderid, foldername) VALUES (null,opendirector)')
            cur.execute('INSERT INTO file(fileid, dataname) VALUES(null,textfiles)')
            cur.execute('SELECT * FROM folder')
            print cur.fetchall()


main()

print 'success'
Was it helpful?

Solution

Assuming that you want to add all the filenames to the database (without considering their relative path inside opendirectory), here is a way to correct your queries.

cur.execute ("INSERT INTO folder (foldername) VALUES (?);", (opendirectory))
cur.execute("INSERT INTO file (dataname) VALUES(?);", (textfiles))

NB: this won't be sufficient to make the logical link in database between a file and the opendirectory it was found in.


Now, let's say you want to store in DB the path of the parent folder of the file in addition to its filename: Just add a column parent_folder in your file table, and use an insert query like this (I changed the variable names to make them easier to understand):

for dirpath, dirsInDirpath, filesInDirPath in os.walk(opendirectory):
    for myfile in filesInDirPath:   
        cur.execute("INSERT INTO file (dataname, parent_folder) VALUES(?, ?);", (myfile, dirpath))
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top