gpt4 book ai didi

pandas - 如何使用 pandastable 更新数据库

转载 作者:行者123 更新时间:2023-12-02 13:51:50 24 4
gpt4 key购买 nike

我正在创建一个代码,将从数据库中获取数据并将其显示在 pandastable 中。它完美地显示了数据。我编辑了一个单元格,然后按 Enter 键并下载了数据,效果非常好。但是我如何将同一单元格更新到数据库中?

下面是我的 pandastable 代码:

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()

最佳答案

您在 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()

关于pandas - 如何使用 pandastable 更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51533805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com