吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1215|回复: 12
收起左侧

[Python 转载] 简单实现web查询sqlite3数据库

  [复制链接]
dfydfydfy896 发表于 2023-7-22 11:36
相关信息:
0 代码为CHAPGPT生成
1 用flask实现web功能,Tkinter控制服务启停
2 数据库路径固定为C:/Users/Administrator/database.sqlite3
3 网页的第一个区域,用表格显示数据库renyuan数据表中所有信息,不单独编写flask的 index.html 模板文件。
4 网页的第二个区域实现搜索查询的功能,添加一个包含所有列名的下拉搜索框,可以指定选择某列数据进行查询。
5 运行后点击'切换运行/停止'开始运行,再次点击,关闭退出
6 默认为本机5000端口http://127.0.0.1:5000/

填充数据
[Python] 纯文本查看 复制代码
import sqlite3
# 连接到数据库(如果数据库不存在,则会创建一个新的数据库)
conn = sqlite3.connect(r'C:\Users\Administrator\database.sqlite3')

# 创建游标对象
cursor = conn.cursor()

# 创建renyuan表
cursor.execute('''CREATE TABLE renyuan (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    name TEXT,
                    age INTEGER,
                    gender TEXT,
                    wealth REAL,
                    source TEXT,
                    industry TEXT,
                    country TEXT,
                    rank INTEGER
                )''')

# 插入数据
data = [
    ('马云', 57, '男', 450, '阿里巴巴', '电子商务', '中国', 1),
    ('马化腾', 50, '男', 440, '腾讯', '互联网', '中国', 2),
    ('许家印', 63, '男', 430, '恒大集团', '房地产', '中国', 3),
    ('杨惠妍', 40, '女', 410, '中国恒大', '房地产', '中国', 4),
    ('张一鸣', 39, '男', 400, '字节跳动', '互联网', '中国', 5),
    ('王健林', 67, '男', 390, '万达集团', '房地产', '中国', 6),
    ('王卫', 59, '男', 380, '中国联通', '电信', '中国', 7),
    ('雷军', 53, '男', 370, '小米', '电子产品', '中国', 8),
    ('刘强东', 48, '男', 360, '京东', '电子商务', '中国', 9),
    ('丁磊', 49, '男', 350, '网易', '互联网', '中国', 10),
    ('宗庆后', 75, '男', 340, '娃哈哈', '饮料', '中国', 11),
    ('许荣茂', 64, '男', 330, '恒力集团', '化工', '中国', 12),
    ('刘永好', 71, '男', 320, '碧桂园', '房地产', '中国', 13),
    ('孙正义', 64, '男', 310, '软银', '投资', '中国', 14),
    ('孙宏斌', 59, '男', 300, '乐视网', '互联网', '中国', 15),
    ('潘石屹', 59, '男', 290, 'SOHO中国', '房地产', '中国', 16),
    ('许家标', 62, '男', 280, '恒大集团', '房地产', '中国', 17),
    ('姚振华', 59, '男', 270, '中国国电集团', '能源', '中国', 18),
    ('李彦宏', 53, '男', 260, '百度', '互联网', '中国', 19),
    ('王石', 73, '男', 250, '万科企业', '房地产', '中国', 20),
]

cursor.executemany('INSERT INTO renyuan (name, age, gender, wealth, source, industry, country, rank) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', data)

# 提交事务
conn.commit()

# 关闭游标和数据库连接
cursor.close()
conn.close()


显示及查询数据

[Python] 纯文本查看 复制代码
import sqlite3
from flask import Flask, render_template_string, request, jsonify
import threading
import tkinter as tk
import time
import os
import signal

# 数据库路径
DB_PATH = "C:/Users/Administrator/database.sqlite3"

# 创建Flask应用
app = Flask(__name__)

# 全局变量,用于判断Flask进程的运行状态
running = False

# 创建Tkinter窗口
window = tk.Tk()
window.title("数据库查询工具")
window.geometry("320x320")

# 文字状态指示控件
status_label = tk.Label(window, text="已停止", font=("Arial", 12))
status_label.pack(pady=20)

# 切换运行/停止按钮点击事件
def toggle_flask():
    global running
    if running:
        # 停止Flask进程
        os.kill(os.getpid(), signal.SIGINT)
        running = False
        status_label.config(text="已停止")
    else:
        # 启动Flask进程
        threading.Thread(target=start_flask).start()

# 切换运行/停止按钮
toggle_button = tk.Button(window, text="切换运行/停止", command=toggle_flask)
toggle_button.pack(pady=10)

# 退出程序按钮点击事件
def exit_program():
    # 关闭Flask进程
    os.kill(os.getpid(), signal.SIGINT)
    time.sleep(1)
    # 关闭Tkinter窗口
    window.destroy()

# 退出程序按钮
exit_button = tk.Button(window, text="退出程序", command=exit_program)
exit_button.pack(pady=10)

# 启动Flask进程的函数
def start_flask():
    global running
    running = True
    status_label.config(text="正在运行")
    app.run()

# Flask路由:根路径
@app.route('/')
def index():
    table_data = get_all_data()
    columns = get_table_columns()
    return render_template_string('''
        <h1>数据库查询工具</h1>
        <h2>renyuan数据表</h2>
        <table border="1">
            <thead>
                <tr>
                    {% for column in columns %}
                    <th>{{ column }}</th>
                    {% endfor %}
                </tr>
            </thead>
            <tbody>
                {% for row in table_data %}
                <tr>
                    {% for value in row.values() %}
                    <td>{{ value }}</td>
                    {% endfor %}
                </tr>
                {% endfor %}
            </tbody>
        </table>
        <h2>精确查询</h2>
        <select id="column">
            <option value="">选择列名</option>
            {% for column in columns %}
            <option value="{{ column }}">{{ column }}</option>
            {% endfor %}
        </select>
        <input type="text" id="search" placeholder="输入查询信息">
        <button onclick="search()">查询</button>
        <table id="search-results" border="1">
            <thead>
                <tr>
                    {% for column in columns %}
                    <th>{{ column }}</th>
                    {% endfor %}
                </tr>
            </thead>
            <tbody>
            </tbody>
        </table>
        <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
        <script>
            function search() {
                var column = $("#column").val();
                var search = $("#search").val();
                $.post("/search", {column: column, search: search}, function(data) {
                    var tbody = $("#search-results tbody");
                    tbody.empty();
                    $.each(data, function(index, row) {
                        var tr = $("<tr></tr>");
                        {% for column in columns %}
                        tr.append("<td>" + row["{{ column }}"] + "</td>");
                        {% endfor %}
                        tbody.append(tr);
                    });
                });
            }
        </script>
    ''', table_data=table_data, columns=columns)

# Flask路由:精确查询
@app.route('/search', methods=['POST'])
def search():
    column = request.form['column']
    search = request.form['search']
    data = search_data(column, search)
    return jsonify(data)

# 查询数据库中的所有数据
def get_all_data():
    conn = sqlite3.connect(DB_PATH)
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM renyuan")
    rows = cursor.fetchall()
    columns = [column[0] for column in cursor.description]
    data = [dict(zip(columns, row)) for row in rows]
    conn.close()
    return data

# 获取数据库表的列名
def get_table_columns():
    conn = sqlite3.connect(DB_PATH)
    cursor = conn.cursor()
    cursor.execute("PRAGMA table_info(renyuan)")
    columns = [column[1] for column in cursor.fetchall()]
    conn.close()
    return columns

# 根据列名和查询信息进行精确查询
def search_data(column, search):
    conn = sqlite3.connect(DB_PATH)
    cursor = conn.cursor()
    cursor.execute(f"SELECT * FROM renyuan WHERE {column}=?", (search,))
    rows = cursor.fetchall()
    columns = [column[0] for column in cursor.description]
    data = [dict(zip(columns, row)) for row in rows]
    conn.close()
    return data

# 运行Tkinter窗口主循环
window.mainloop()


免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
clearlove1 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| dfydfydfy896 发表于 2023-7-22 11:40
附件图片为运行截图
111.jpg
鹿鸣 发表于 2023-7-22 12:09
M1SAKAZ 发表于 2023-7-22 14:13
wu66668888 发表于 2023-7-22 14:20
好深奥,看不懂
jsj08 发表于 2023-7-22 14:24
不错的简单实例,收藏一个
sddpzyj 发表于 2023-7-22 14:43
虚心学习~
liyitong 发表于 2023-7-22 14:49
insert代码自动批量吗?好简单。
网页查询用了jquery,美滋滋啊美滋滋。
lcg2014 发表于 2023-7-24 09:43
进步明显,建议加上删除/更新/增加功能
smile7788 发表于 2023-7-24 16:50
第一次看见把窗体程序和flask 服务结合在一起得,打开了我的脑洞,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-3 04:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表