>

나는 데이터베이스에서 데이터를 가져 와서 pandastable에 표시하는 코드를 만들고 있습니다. 데이터를 완벽하게 보여줍니다. 하나의 셀을 편집하고 Enter 키를 눌러 데이터가 완벽하게 작동했습니다. 하지만 같은 셀을 데이터베이스로 어떻게 업데이트합니까?

팬더 테이블에 대한 코드는 다음과 같습니다.

from tkinter import *
import tkinter as tk
from tkinter import ttk
from pandastable import Table, TableModel
import sqlite3
import pandas as pd
import Backend
root = tk.Tk()
root.geometry("1250x650+0+0")
root.title("MAYA")
root.configure(background="black")
f = Frame(root)
f.pack(fill=BOTH,expand=1)
conn = sqlite3.connect("99_data_increment.db")
df = pd.read_sql_query("SELECT * FROM crawled",conn)
pt = Table(f, dataframe=df, showtoolbar=True, showstatusbar=True)
pt.show()
blank = ""
#Backend.insert(blank, blank, blank, blank, blank, "1", blank, blank, blank, blank, blank, blank,blank, blank, blank, blank,blank)
root.mainloop()

이것은 데이터베이스 코드입니다 :

import sqlite3
def connect():
    conn=sqlite3.connect("99_data_increment.db")
    cur=conn.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS crawled (id INTEGER PRIMARY KEY, State , XID , Project_Name , City , Main_City , Registration_Number , Promoter_Name , Rera_URL , PDF_text, Crawled_Date , Status, Names, Transaction_Date, Comments, Call_Contact_Number, Creation_Type, Builder_Website)")
    conn.commit()
    conn.close()
def insert(State, XID, Project_Name, City, Main_City, Registration_Number, Promoter_Name, Rera_URL, PDF_text, Crawled_Date, Status, Names, Transaction_Date, Comments, Call_Contact_Number, Creation_Type, Builder_Website):
    conn=sqlite3.connect("99_data_increment.db")
    cur=conn.cursor()
    cur.execute("INSERT INTO crawled VALUES (NULL,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",(State, XID, Project_Name, City, Main_City, Registration_Number, Promoter_Name, Rera_URL, PDF_text, Crawled_Date, Status, Names, Transaction_Date, Comments, Call_Contact_Number, Creation_Type, Builder_Website))
    conn.commit()
    conn.close()
connect()

  • 답변 # 1

    DataFrame에 모든 데이터가 있으며이를 사용하여 데이터를 대체 할 수 있습니다

    df.to_sql("crawled", conn, if_exists="replace")
    
    

    Tkinter에 to_sql() 로 코드를 실행하는 버튼을 추가 할 수 있습니다.

    import tkinter as tk
    from tkinter import ttk
    from pandastable import Table, TableModel
    import sqlite3
    import pandas as pd
    import Backend
    # --- functions ---
    def save():
        df.to_sql("crawled", conn, if_exists="replace")
    # --- main ---
    root = tk.Tk()
    #root.geometry("1250x650+0+0")
    #root.title("MAYA")
    #root.configure(background="black")
    f = tk.Frame(root)
    f.pack(fill="both", expand=True)
    conn = sqlite3.connect("99_data_increment.db")
    df = pd.read_sql_query("SELECT * FROM crawled", conn)
    pt = Table(f, dataframe=df, showtoolbar=True, showstatusbar=True)
    pt.show()
    f = tk.Button(root, text="Save", command=save)
    f.pack(fill="both", expand=True)
    root.mainloop()
    
    

    <시간>

    수정

    pandatable.Table 를 사용하여 자체 테이블을 생성하는 경우 ) 그러면 handleCellEntry() 를 변경할 수 있습니다  셀 편집을 마치면 실행되므로 변경된 행을 볼 수 있으며 데이터베이스에서 행을 업데이트 할 수 있습니다.

    이와 같은 일

    import tkinter as tk
    from tkinter import ttk
    from pandastable import Table, TableModel
    import sqlite3
    import pandas as pd
    import Backend
    # --- classes ---
    class MyTable(Table):
        def handleCellEntry(self, row, col):
            super().handleCellEntry(row, col)
            print('changed:', row, col, "(TODO: update database)")
            #pd.read_sql_query("UPDATE ...", conn)
            # or remeber `row` on list and `UPDATE` it later
            return
    # --- main ---
    root = tk.Tk()
    #root.geometry("1250x650+0+0")
    #root.title("MAYA")
    #root.configure(background="black")
    f = tk.Frame(root)
    f.pack(fill="both", expand=True)
    conn = sqlite3.connect("99_data_increment.db")
    df = pd.read_sql_query("SELECT * FROM crawled", conn)
    pt = MyTable(f, dataframe=df, showtoolbar=True, showstatusbar=True) # <-- MyTable
    pt.show()
    root.mainloop()
    
    

관련 자료

  • 이전 Django에서 필터링 할 때 항목 순서를 어떻게 유지합니까?
  • 다음 css - @supports 규칙으로 LESS 변수를 사용할 수 있습니까?