python编程:创建 SQLite 数据库和表的图形用户界面应用程序

news2024/11/18 3:49:29

在本文中,我将介绍如何使用 wxPython 模块创建一个图形用户界面(GUI)应用程序,该应用程序允许用户选择 SQLite 数据库的存放路径、数据库名称、表名称,并动态添加字段及其类型。以下是具体的实现步骤和代码示例。
C:\pythoncode\new\sqlitegenerator.py

环境准备

首先,确保你已经安装了 wxPythonsqlite3 模块。你可以使用以下命令安装 wxPython

pip install wxPython
代码实现

下面是完整的代码实现:

import wx
import sqlite3
import os

class SQLiteDBCreator(wx.Frame):
    def __init__(self, parent, title):
        super(SQLiteDBCreator, self).__init__(parent, title=title, size=(600, 500))
        
        self.panel = wx.Panel(self)
        
        vbox = wx.BoxSizer(wx.VERTICAL)
        
        # Database Path
        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        self.db_path_text = wx.TextCtrl(self.panel)
        db_path_btn = wx.Button(self.panel, label='Select Path')
        db_path_btn.Bind(wx.EVT_BUTTON, self.on_select_path)
        hbox1.Add(self.db_path_text, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
        hbox1.Add(db_path_btn, flag=wx.ALL, border=5)
        
        # Database Name
        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        db_name_lbl = wx.StaticText(self.panel, label="Database Name:")
        self.db_name_text = wx.TextCtrl(self.panel)
        hbox2.Add(db_name_lbl, flag=wx.ALL, border=5)
        hbox2.Add(self.db_name_text, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
        
        # Table Name
        hbox3 = wx.BoxSizer(wx.HORIZONTAL)
        table_name_lbl = wx.StaticText(self.panel, label="Table Name:")
        self.table_name_text = wx.TextCtrl(self.panel)
        hbox3.Add(table_name_lbl, flag=wx.ALL, border=5)
        hbox3.Add(self.table_name_text, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
        
        # Fields List
        self.fields_panel = wx.Panel(self.panel)
        self.fields_sizer = wx.BoxSizer(wx.VERTICAL)
        self.fields_panel.SetSizer(self.fields_sizer)
        
        add_field_btn = wx.Button(self.panel, label="Add Field")
        add_field_btn.Bind(wx.EVT_BUTTON, self.on_add_field)
        
        # Create Button
        create_btn = wx.Button(self.panel, label='Create Database and Table')
        create_btn.Bind(wx.EVT_BUTTON, self.on_create_db)
        
        # Add to vbox
        vbox.Add(hbox1, flag=wx.EXPAND)
        vbox.Add(hbox2, flag=wx.EXPAND)
        vbox.Add(hbox3, flag=wx.EXPAND)
        vbox.Add(self.fields_panel, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
        vbox.Add(add_field_btn, flag=wx.ALL|wx.CENTER, border=10)
        vbox.Add(create_btn, flag=wx.ALL|wx.CENTER, border=10)
        
        self.panel.SetSizer(vbox)
        
        self.Centre()
        self.Show()
    
    def on_select_path(self, event):
        with wx.DirDialog(self, "Choose database save directory", "", wx.DD_DEFAULT_STYLE) as dirDialog:
            if dirDialog.ShowModal() == wx.ID_OK:
                self.db_path_text.SetValue(dirDialog.GetPath())
    
    def on_add_field(self, event):
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        
        field_name_text = wx.TextCtrl(self.fields_panel)
        field_type_choice = wx.Choice(self.fields_panel, choices=["INTEGER", "TEXT", "REAL", "BLOB"])
        
        hbox.Add(field_name_text, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
        hbox.Add(field_type_choice, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
        
        self.fields_sizer.Add(hbox, flag=wx.EXPAND)
        self.fields_panel.Layout()
        self.panel.Layout()
    
    def on_create_db(self, event):
        db_path = self.db_path_text.GetValue()
        db_name = self.db_name_text.GetValue()
        table_name = self.table_name_text.GetValue()
        
        if not db_path or not db_name or not table_name:
            wx.MessageBox('Database path, name, and table name are required', 'Error', wx.OK | wx.ICON_ERROR)
            return
        
        fields = []
        for hbox in self.fields_sizer.GetChildren():
            field_name_text = hbox.GetSizer().GetChildren()[0].GetWindow()
            field_type_choice = hbox.GetSizer().GetChildren()[1].GetWindow()
            field_name = field_name_text.GetValue()
            field_type = field_type_choice.GetString(field_type_choice.GetSelection())
            if field_name and field_type:
                fields.append(f"{field_name} {field_type}")
        
        if not fields:
            wx.MessageBox('At least one field is required', 'Error', wx.OK | wx.ICON_ERROR)
            return
        
        db_full_path = os.path.join(db_path, db_name)
        
        try:
            conn = sqlite3.connect(db_full_path)
            cursor = conn.cursor()
            
            create_table_query = f"CREATE TABLE {table_name} ({', '.join(fields)})"
            cursor.execute(create_table_query)
            
            conn.commit()
            conn.close()
            
            wx.MessageBox('Database and table created successfully', 'Success', wx.OK | wx.ICON_INFORMATION)
        except sqlite3.Error as e:
            wx.MessageBox(f"An error occurred: {e}", 'Error', wx.OK | wx.ICON_ERROR)

if __name__ == '__main__':
    app = wx.App(False)
    frame = SQLiteDBCreator(None, "SQLite Database Creator")
    app.MainLoop()

功能简介

  1. 选择数据库存放路径:通过点击“Select Path”按钮,用户可以选择数据库文件的存放目录。
  2. 设置数据库名称:用户可以输入数据库名称。
  3. 设置表名称:用户可以输入表名称。
  4. 添加字段:用户可以动态添加任意数量的字段,每个字段包含字段名称和字段类型(从下拉框中选择)。
  5. 创建数据库和表:点击“Create Database and Table”按钮,根据用户输入的信息创建 SQLite 数据库和表。

使用指南

  1. 运行程序后,首先选择数据库文件的存放路径。
  2. 输入数据库名称和表名称。
  3. 点击“Add Field”按钮添加字段,并为每个字段设置名称和类型。
  4. 添加完所有字段后,点击“Create Database and Table”按钮创建数据库和表。

结果如下:

在这里插入图片描述
在这里插入图片描述

总结

通过本篇博客介绍的代码示例,你可以轻松创建一个功能完善的 GUI 应用程序,用于动态创建 SQLite 数据库和表。这不仅提高了用户体验,还简化了数据库管理的流程。如果你有任何问题或建议,欢迎在评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1721241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode503:下一个更大元素Ⅱ

题目描述 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这…

配置arduino和ESP8266

首先准备好arduino 的IDE和ESP8266的驱动以及板子 1.安装驱动,双击x64的版本驱动,安装好以后,在资源管理器检查端口,比如下下图出现的COM4就是esp8266所使用的端口 2.安装好arduino最好不要在路径中存在中文符号,打开…

专升本的硕士学历被歧视了。。

精品推荐: 《征服数据结构》,《经典图论算法》 在牛客网上看到一个帖子,一网友说之前已经签了一家公司,现在又找了一家公司,并且这家公司也发了offer,让他和上一家公司解约。结果他和上一家公司解约完之后&…

FENDI CLUB精酿啤酒中原麦汁浓度的高低有何区别?

关于精酿啤酒,有两个关键数据,一个是原麦汁浓度,一个是酒精度。酒精度无非是含酒精的高低,但原麦汁浓度又是什么呢?另外精酿啤酒中原麦汁浓度有高有低,究竟有哪些区别呢? 原麦汁浓度是指啤…

【面试八股总结】MySQL索引(二):B+树数据结构、索引使用场景、索引优化、索引失效

参考资料:小林coding、阿秀 一、为什么InnoDB采用B树作为索引数据结构? B 树是一个自平衡多路搜索树,每一个节点最多可以包括 M 个子节点,M 称为 B 树的阶,所以 B 树就是一个多叉树。 B 树与 B 树的差异:…

为何选择 MindMapper

MindMapper是一款专业的可视化思维导图软件,通过智能绘图方法,在管理信息和 处理工作流程中,帮助提高组织、审查、合作、分享和交流能力。 企业创造力 在企业界,MindMapper思维导图软件可以提高生产力和沟通效果,以及…

react路由参数path不再支持正则?比较v5和v6写法的差异性

文章目录 前言v5方式:直接在path参数中,写入对应正则(1)代码详细注释如下(2)页面输出如下,会出现undefined的情况 v6方式: 在路由对象中配置,但只可配动态路由,不可用正则…

FTP原理

一、FTP工作原理 FTP是一种文件传输协议,用来上传和下载,实现远程共享文件。 工作原理 : 端口号21号端口,用于互联网上的控制文件的双向传输 是一个应用程序。工作在TCP/IP。 连接时同时处理服务器和客户端的连接命令和数据传输&…

CANOE制造dll文件,以及应用dll文件

1、使用canoe自带的capl dll 2、然后使用Visual Studio 2022 打开项目 3、项目打开后修改下项目属性 4、修改capldll.cpp文件 4.1 添加的内容 void CAPLEXPORT far CAPLPASCAL appSum(long i, long j, long* s){*s i j;} {"sum", (CAPL_FARCALL)appSum, "…

只出现一次的数字II ---- 位运算

题目链接 题目: 分析: 对于只出现一次的数字, 他的任意一个bit位, 可能是0或1对于其余出现3次的数字, 假设有3n个数, 那么他们的任意一个bit相加的和可能是3n个0或3n个1那么对于数组中的全部数字的任意一个bit位之和共有三种情况: 3n个1 1 3n13n个0 1 13n个1 0 3n3n个0…

海外媒体发稿:打造个人品牌的2个必备宣发套餐-华媒舍

个人品牌在现代社会中扮演着关键的角色,它可以帮助我们在职场竞争中脱颖而出。但是,要想打造一个成功的个人品牌,并不是一件容易的事情。在这篇文章中,我将为你介绍两个必备的宣发套餐,让你成为行家。 1. 社交媒体宣发…

HR人才测评,如何做营销人员岗位素质测评?

营销人员是企业中的重要角色,他们直接负责企业产品或服务的销售和推广,是企业中最直接影响销售业绩的人才之一。因此,营销人员的基本素质测评非常重要,能够有效评估营销人员的能力和潜力,为企业招聘和培养优秀的营销人…

企业如何进行快递运费对账?

在电子面单寄件取代手写纸质面单之后,加上月结寄件模式的推行,企业快递运费对账,成了行政的一个难题...... 早期的手写纸质面单寄件,企业行政或者财务相关人员,遵循寄前审批,寄后报销的原则进行对账。随着电…

Science Robotics 自然脊髓反射回路应用在假肢手的感觉运动控制

恢复截肢者的感觉反馈对于改善假肢控制是必要的,但实现这一目标的几种非侵入性技术在认知上要求很高。用于假肢控制的感觉反馈通常基于在特定类型的感觉刺激中编码感觉信息,用户通过解析来调整假体的控制。然而,在生理条件下,从周…

深度神经网络——什么是线性回归?

线性回归是一种用于预测或可视化的算法 两个不同特征/变量之间的关系。 在线性回归任务中,要检查两种变量: 因变量和自变量。 自变量是独立的变量,不受其他变量的影响。 随着自变量的调整,因变量的水平将会波动。 因变量是正在研究…

Nginx实战:日志打印自定义请求头

nginx的日志可以打印很多内容,但是有时候自定义的请求头该怎么打印呢?像下面这种场景: 其实很简单,设置日志打印格式log_format的时候,自定义的请求头用 【$http_自定义请求头名】 的格式就可以打印出来 例如你的自定义…

分库分表、读写分离--ShardingJDBC

1. 项目准备 1.1 建立数据库表 建立user_manage数据库,在该库中建立1张表app_user用来做分库前的测试,另外建12张按月份命名的表app_user_2024XX用来做分库。 CREATE DATABASE IF NOT EXISTS user_manage CHARACTER SET utf8 COLLATE utf8_general_ci…

【Python Cookbook】S1E08 在两个字典中寻找相同点

目录 问题解决方案讨论 问题 在两个字典中,如果我们想要找到其中相同的地方,比如相同的键、相同的值等。 解决方案 考虑以下两个字典以及其中内容: a {x: 1,y: 2,z: 3 }b {w: 10,x: 11,y: 2 }要找出这两个字典中的相同之处,…

Linux中部署MinIO

Linux中部署MinIO 下载MinIO可执行程序: wget https://dl.min.io/server/minio/release/linux-amd64/minio 添加执行权限: chmod x minio 创建存储目录,例如/data: mkdir -p /data 运行MinIO服务器,需要设置MIN…

数据结构与算法 :数据结构绪论,时间和空间复杂度 推导大O阶

各位少年 大家好 我是博主那一脸阳光,今天开始给大家分享数据结构,由于我个人当初学的时候是自学,并没有看培训机构的视频 所以接下来我分享的数据结构的内容,源头来自一本书叫做大话数据结构。顺便一提为了方面大家理解&#xff…