# 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&
python: 并发编程 (Concurrent Programming) Simple example
于 2025-02-22 23:05:26 首次发布