python: 并发编程 (Concurrent Programming) Simple example

# encoding: utf-8
# 版权所有 2025 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:并发编程 (Concurrent Programming) pip install mysql.connector
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, poostgreSQL 17.0 Oracle21C
# Datetime  : 2025/2/22 18:15
# User      : geovindu
# Product   : PyCharm
# Project   : Pysimple
# File      : Concurrent.py
# explain   : 学习
import tkinter as tk
from tkinter import ttk
import pymysql
import asyncio
import threading

# 连接到 MySQL 数据库
mydb = pymysql.connect(
    host="localhost",
    user="root",
    password="geovindu",
    database="TechnologyGame"
)
mycursor = mydb.cursor()

# 创建表(如果不存在)
mycursor.execute("CREATE TABLE IF NOT EXISTS DuSchool (SchoolId INT AUTO_INCREMENT PRIMARY KEY, SchoolName VARCHAR(255), SchoolTelNo VARCHAR(255))")

async def insert_data():
    """

    :return:
    """
    name = entry_name.get()
    tel = entry_tel.get()
    sql = "INSERT INTO DuSchool (SchoolName, SchoolTelNo) VALUES (%s, %s)"
    val = (name, tel)
    mycursor.execute(sql, val)
    mydb.commit()
    await refresh_treeview()

async def update_data():
    """

    :return:
    """
    selected_item = tree.selection()
    if selected_item:
        id_ = tree.item(selected_item, "values")[0]
        print("id:",id_)
        name = entry_name.get()
        tel = entry_tel.get()
        sql = "UPDATE DuSchool SET SchoolName = %s, SchoolTelNo = %s WHERE SchoolId = %s"
        val = (name, tel, id_)
        mycursor.execute(sql, val)
        mydb.commit()
        await refresh_treeview()

async def query_data():
    """

    :return:
    """
    mycursor.execute("SELECT * FROM DuSchool")
    rows = mycursor.fetchall()
    print(rows)
    #tree.delete(*tree.get_children())
    for item in tree.get_children():
        tree.delete(item)
    for row in rows:
        tree.insert("", "end", values=row)

async def delete_data():
    """

    :return:
    """

    selected_item = tree.selection()
    if selected_item:
        id_ = tree.item(selected_item, "values")[0]
        sql = "DELETE FROM DuSchool WHERE SchoolId = %s"
        val = (id_,)
        mycursor.execute(sql, val)
        mydb.commit()
        await refresh_treeview()

async def refresh_treeview():
    """

    :return:
    """
    await query_data()

def run_async_task(task):
    """

    :param task:
    :return:
    """
    #asyncio.run(task())
    asyncio.run_coroutine_threadsafe(task(), loop)


# 创建异步事件循环
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

# 在单独的线程中运行异步事件循环
threading.Thread(target=loop.run_forever, daemon=True).start()

root = tk.Tk()
root.title("并发编程操作 MySQL")

# 输入框
tk.Label(root, text="校名:").grid(row=0, column=0)
entry_name = tk.Entry(root)
entry_name.grid(row=0, column=1)

tk.Label(root, text="电话:").grid(row=1, column=0)
entry_tel = tk.Entry(root)
entry_tel.grid(row=1, column=1)

# 按钮
tk.Button(root, text="插入数据", command=lambda: run_async_task(insert_data)).grid(row=2, column&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值