0

私はpythonが初めてで、それらのフォルダー内のフォルダー名とテキストファイルをデータベースに追加しようとしています。問題は、「テキストファイル」と「オープンディレクトリ」をデータベースに追加する方法がわからないことです。このコードを見て、私を助けてください。ありがとう

#!/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'
4

1 に答える 1

2

データベースにすべてのファイル名を追加したいと仮定すると ( 内の相対パスを考慮せずにopendirectory)、クエリを修正する方法は次のとおりです。

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

opendirectory注意: これは、データベース内でファイルとそれが見つかったの間の論理リンクを作成するのに十分ではありません。


ここで、ファイル名に加えて、ファイルの親フォルダーのパスをDB に保存するとparent_folderします。テーブルに列を追加し、fileこのような挿入クエリを使用します (変数名を簡単にするために変更しました)。理解するために):

for dirpath, dirsInDirpath, filesInDirPath in os.walk(opendirectory):
    for myfile in filesInDirPath:   
        cur.execute("INSERT INTO file (dataname, parent_folder) VALUES(?, ?);", (myfile, dirpath))
于 2011-11-21T10:05:01.300 に答える