簡體   English   中英

如何將excel表中的數據同時導入關系表

[英]how to import data from excel sheet into relational tables at the same time

我正在嘗試將圖片excel表格中的excel表格鎖定導入3個表格,這些表格具有1到多個關系,這些表格我要導入到我可以導入表格,但這將是不好的做法請幫我這個

我看着堆棧溢出的答案,但我沒有罰款任何它可能是我的壞問題

import tkinter as tk 
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showerror
from tkinter import ttk
import sqlite3
import xlrd

class SchoolProjict(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.app_data = {"name": tk.StringVar(),
                         }
        container = tk.Frame(self)
        container.pack(side = "top", fill = "both", expand = True)
        container.grid_rowconfigure(0, weight = 1)
        container.grid_columnconfigure(0, weight = 1)
        self.frames = {}
        for F in (StartPage,  SetingPage):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row = 0, column = 0, sticky = "nsew")
        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

    def get_page(self, classname):
        for page in self.frames.values():
            if str(page.__class__.__name__) == classname:
                return page
        return None

def printingstuff(var1):
    print (var1)

def printontherthing(page_class):
    print(page_class)


class StartPage(tk.Frame):
    def __init__(self, parent, controller):
        self.controller = controller
        tk.Frame.__init__(self, parent)
        lablel = ttk.Label(self, text = "Main Page")
        lablel.pack(pady = 10, padx = 10)
        button2 = ttk.Button(self, text = "Siting", command = lambda: controller.show_frame(SetingPage))
        button2.pack()

class SetingPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        lablel = tk.Label(self, text = "Siting Page")
        lablel.grid(row = 0, column = 0)
        self.text1 = tk.Entry(self)  #<== i want to show the path of the file i am going to open Here after i select it from openfile 
        self.text1.grid(row = 2, column = 0)
        self.text1.focus()
        button1 = ttk.Button(self, text = "print text1", command = lambda: printingstuff(self.text1.get()))
        button1.grid(row = 3, column = 0)
        button2 = ttk.Button(self, text="open file", command= self.load_file, width=10)
        button2.grid(row = 3, column = 1)
        button4 = ttk.Button(self, text = "Main Page", command = lambda: controller.show_frame(StartPage))
        button4.grid(row = 4, column = 1)
        button4 = ttk.Button(self, text = "Creat Database", command = self.CreatTable)
        button4.grid(row = 4, column = 0)

    def load_file(self):
        fname = askopenfilename(filetypes=(("Excel file", "*.xls"),
                                           ("HTML files", "*.html;*.htm"),
                                           ("All files", "*.*") ))
        if fname:
            try:
                # print(fname)
                value = str(fname)
                page_var = self.controller.get_page("SetingPage")
                page_var.text1.insert(0, value)
                return

            except:                    
                showerror("Open Source File", "Failed to read file\n'%s'" % fname)
            return

    def CreatTable(self):
        loc = (self.text1.get())
        wb = xlrd.open_workbook(loc)
        sheet = wb.sheet_by_index(1)

        self.conn = sqlite3.connect("exeldata.db")
        self.cur = self.conn.cursor()
        self.wkb = wb
        self.sh = sheet

        self.cur.execute("""CREATE TABLE IF NOT EXISTS gradelevel(
            GlId INTEGER PRIMARY KEY,
            GradNumber text)""")

        self.cur.execute("""CREATE TABLE IF NOT EXISTS classnumber(
            CID INTEGER PRIMARY KEY,
            GradID INTEGER, 
            ClassNumber text,
            FOREIGN KEY(GradID) REFERENCES gradelevel(GlId))""")

        self.cur.execute("""CREATE TABLE IF NOT EXISTS studintinfo(
            StID INTEGER PRIMARY KEY,
            StudintID text,
            StudintName text,
            MobileNumber text,
            ClassID INTEGER,
            FOREIGN KEY(ClassID) REFERENCES classnumber(CID))""")

        print ("Table created")

        for sheet in wb.sheets():
            number_of_rows = sheet.nrows

        for r in  range(4, number_of_rows):    # <== this code good only for 1 tabl this dose not work with the 3 tables i did 
            mobile = self.sh.cell_value(r, 1)
            claasn = self.sh.cell_value(r, 2)   
            greadn = self.sh.cell_value(r, 3)
            studintn = self.sh.cell_value(r, 4)
            studinti = self.sh.cell_value(r, 5)

            self.cur.execute("INSERT INTO gradelevel(GradNumber)VALUES(?)",(greadn,))
            greadID = self.cur.lastrowid
            self.cur.execute("INSERT INTO classnumber(ClassNumb, GradID)VALUES(?,?)",(claasn, greadID))
            classnID = self.cur.lastrowid
            self.cur.execute("INSERT INTO studintinfo(StudintID, StudintName, MobileNumber, ClassID)VALUES(?,?,?,?)",(studinti, studintn, mobile, classnID))

            self.conn.commit()
        print ("Data inserted")


        self.CloseConnection()

    def CloseConnection(self):
        self.cur.close()
        self.conn.close()
        print ("Connection Closed")

app = SchoolProjict()
app.mainloop()

我也是編程新手,謝謝大家的幫助

我在這個網站上找到了答案,就像這樣

self.cur.execute("SELECT GlId FROM gradelevel WHERE GradNumber = ? ", (greadn,)) 
            rows = self.cur.fetchone()
            if rows:
                GreadLvl_ID = rows[0] 
            else:
                self.cur.execute("INSERT INTO gradelevel(GradNumber)VALUES(?)",(greadn,))
                self.cur.execute("SELECT GlId FROM gradelevel WHERE GradNumber = ? ", (greadn,)) 
                rows = self.cur.fetchone()
                GreadLvl_ID = rows[0]
                greadID = self.cur.lastrowid


            self.cur.execute("SELECT CID FROM classnumber WHERE ClassNumb = ? AND GradID = ?", (claasn, GreadLvl_ID))
            rows1 = self.cur.fetchone()
            if rows1:
                class_ID = rows1[0]
            else:
                self.cur.execute("INSERT INTO classnumber(ClassNumb, GradID)VALUES(?,?)",(claasn, GreadLvl_ID))
                self.cur.execute("SELECT CID FROM classnumber WHERE ClassNumb = ? AND GradID = ?", (claasn, GreadLvl_ID))
                rows1 = self.cur.fetchone()
                class_ID = rows1[0]
                classnID = self.cur.lastrowid


            self.cur.execute("SELECT StID FROM studintinfo WHERE StudintID = ? AND ClassID = ?", (studinti, class_ID))
            rows2 = self.cur.fetchone()
            if rows2:
                studint_ID = rows2[0]
            else:
                self.cur.execute("INSERT INTO studintinfo(StudintID, StudintName, MobileNumber, ClassID)VALUES(?,?,?,?)",(studinti, studintn, mobile, class_ID))
                self.cur.execute("SELECT StID FROM studintinfo WHERE StudintID = ? AND ClassID = ?", (studinti, class_ID))
                rows2 = self.cur.fetchone()
                studint_ID = rows2[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM