Python图形界面 Tkinter入门6 数据库sqlite3

6.1数据库sqlite3基础

from tkinter import *
import sqlite3
import os


root= Tk()
root.title('数据库sqlite3操作')
root.geometry('400x400')

# sqlite3-------------------------------------------------
## 检查数据库文件是否存在,不存在就创建,user表 :
if not os.path.exists('demo.db'):
    # 1.创建数据库文件
    conn = sqlite3.connect('demo.db')
    # 2.光标
    c = conn.cursor()
    # 3.建表 user
    c.execute('''
        CREATE TABLE user (
        first_name TEXT,
        last_name TEXT,
        address_name TEXT,
        city_name TEXT,
        state_name TEXT,
        zipcode_name integer
        )
    ''')



# 提交数据库-函数-----------------------------------------------
def submit():
    # 1.连接数据库
    conn = sqlite3.connect('demo.db')
    # 2.光标
    c = conn.cursor()
    # 3.提交数据
    # Data to Insert
    data = [
        (f_name.get(), l_name.get(), address_name.get(), city_name.get(), state_name.get(), zipcode_name.get()),
       # ('Jane', 'Smith', '[email protected]','Jane', 'Smith', '[email protected]')
    ]

    # Insert Data
    for row in data:
        c.execute("INSERT INTO user (first_name, last_name, address_name, city_name, state_name, zipcode_name) VALUES (?, ?, ?, ?, ?, ?)", row)
    # 4.保存设置
    conn.commit()
    # 5.关闭数据库
    conn.close()
#清空输入框----
    f_name.delete(0, END)
    l_name.delete(0, END)
    address_name.delete(0, END)
    city_name.delete(0, END)
    state_name.delete(0, END)
    zipcode_name.delete(0, END)


# 查询数据库-函数-----------------------------------------------
def query():
    # 1.连接数据库文件
    conn = sqlite3.connect('demo.db')
    # 2.光标
    c = conn.cursor()
    # 3.查询user表所有数据
    c.execute("SELECT * FROM user")
    rows = c.fetchall()
    # 4.遍历数据
    row_date = ''
    for row in rows:
        #row_date += str(row) + '\n'
        # 拼接,如:名字
        row_date += str(row[0]) + ''+ str(row[1])+ str(row[5]) + '\n'
    Label(root, text=row_date).grid(row=8, column=0, columnspan=2)
    # 5.关闭数据库
    conn.close()


# 删除数据库-函数-----------------------------------------------
def delete():
    conn = sqlite3.connect('demo.db')
    c = conn.cursor()
    c.execute("DELETE FROM user WHERE oid = " + delete_name.get())
    delete_name.delete(0, END)
    conn.commit()
    conn.close()



# 更新数据库-函数----------------------第二个窗口-------------------------
# 查询并填入修改框
def update():
    update = Tk()
    update.geometry('400x400')
    update.title('更新数据')
    # 输入框
    f_name_update = Entry(update, width=30)
    f_name_update.grid(row=0, column=1, padx=20)
    l_name_update = Entry(update, width=30)
    l_name_update.grid(row=1, column=1, padx=20)
    address_name_update = Entry(update, width=30)
    address_name_update.grid(row=2, column=1, padx=20)
    city_name_update = Entry(update, width=30)
    city_name_update.grid(row=3, column=1, padx=20)
    state_name_update = Entry(update, width=30)
    state_name_update.grid(row=4, column=1, padx=20)
    zipcode_name_update = Entry(update, width=30)
    zipcode_name_update.grid(row=5, column=1, padx=20)
    # 文字
    f_name_label = Label(update, text='first_name')
    f_name_label.grid(row=0, column=0)
    l_name_label = Label(update, text='last_name')
    l_name_label.grid(row=1, column=0)
    address_name_label = Label(update, text='address')
    address_name_label.grid(row=2, column=0)
    city_name_label = Label(update, text='city')
    city_name_label.grid(row=3, column=0)
    state_name_label = Label(update, text='state')
    state_name_label.grid(row=4, column=0)
    zipcode_name_label = Label(update, text='zipcode')
    zipcode_name_label.grid(row=5, column=0)
    # 1.连接数据库文件
    conn = sqlite3.connect('demo.db')
    # 2.光标
    c = conn.cursor()
    # 3.查询user表+id的数据
    id = delete_name.get()
    c.execute("SELECT * FROM user WHERE oid = " + id    )
    rows = c.fetchall()
    # 4.遍历数据
    row_date = ''
    for row in rows:
        f_name_update.insert(0, row[0])
        l_name_update.insert(0, row[1])
        address_name_update.insert(0, row[2])
        city_name_update.insert(0, row[3])
        state_name_update.insert(0, row[4])
        zipcode_name_update.insert(0, row[5])
    # 5.关闭数据库
    conn.close()
# 更新数据
    def update_save():
        # 1.连接数据库
        conn = sqlite3.connect('demo.db')
        # 2.光标
        c = conn.cursor()
        # 3.提交数据
        # Data to Insert
        data = [
            (f_name_update.get(), l_name_update.get(), address_name_update.get(), city_name_update.get(),
             state_name_update.get(), zipcode_name_update.get(), id),
            # ('Jane', 'Smith', '[email protected]','Jane', 'Smith', '[email protected]')
        ]

        # Insert Data
        for row in data:
            c.execute(
                "UPDATE user SET first_name = ?, last_name = ?, address_name = ?, city_name = ?, state_name = ?, zipcode_name = ? WHERE oid = ?",
                row)
        # 4.保存设置
        conn.commit()
        # 5.关闭数据库
        conn.close()
        # 6.清空输入框---------------
        f_name_update.delete(0, END)
        l_name_update.delete(0, END)
        address_name_update.delete(0, END)
        city_name_update.delete(0, END)
        state_name_update.delete(0, END)
        zipcode_name_update.delete(0, END)
        # 7.关闭修改窗口
        update.destroy()
    # 保存按钮
    update_button = Button(update, text='保存',command=update_save)
    update_button.grid(row=6, column=0, columnspan=2, padx=20, pady=5, ipadx=100)



# 输入框-----------------------------------------------
f_name = Entry(root,width=30)
f_name.grid(row=0,column=1,padx=20)

l_name = Entry(root,width=30)
l_name.grid(row=1,column=1,padx=20)

address_name = Entry(root,width=30)
address_name.grid(row=2,column=1,padx=20)

city_name = Entry(root,width=30)
city_name.grid(row=3,column=1,padx=20)

state_name = Entry(root,width=30)
state_name.grid(row=4,column=1,padx=20)

zipcode_name = Entry(root,width=30)
zipcode_name.grid(row=5,column=1,padx=20)

delete_name = Entry(root,width=30)
delete_name.grid(row=9,column=1,padx=20,pady=20)

# 文字-----------------------------------------------
f_name_label = Label(root,text='first_name')
f_name_label.grid(row=0,column=0)

l_name_label = Label(root,text='last_name')
l_name_label.grid(row=1,column=0)

address_name_label = Label(root,text='address')
address_name_label.grid(row=2,column=0)

city_name_label = Label(root,text='city')
city_name_label.grid(row=3,column=0)

state_name_label = Label(root,text='state')
state_name_label.grid(row=4,column=0)

zipcode_name_label = Label(root,text='zipcode')
zipcode_name_label.grid(row=5,column=0)

delete_name_label = Label(root,text='数据ID')
delete_name_label.grid(row=9,column=0)

# 按钮-----------------------------------------------
# 提交按钮
submit_button = Button(root,text='提交数据',command=submit)
submit_button.grid(row=6,column=0,padx=50)

# 查询按钮
query_button = Button(root,text='查询数据',command=query)
query_button.grid(row=6,column=1)

# 删除按钮
delete_button = Button(root,text='删除',command=delete)
delete_button.grid(row=10,column=0,columnspan=2,padx=20,pady=5,ipadx=100)

# 更新按钮
update_button = Button(root,text='更新',command=update)
update_button.grid(row=12,column=0,columnspan=2,padx=20,pady=5,ipadx=100)


root.mainloop()

你可能感兴趣的:(Python,python,数据库,sqlite3,tkinter)