当前位置:   article > 正文

PyQt项目实战-工作小助手(4 利用QSqlTableModel和tableView 实现Todolist)_python 连接qsql删除

python 连接qsql删除

PyQt项目实战-工作小助手(4 利用QSqlTableModel和tableView 实现Todolist)

本部分通过QSqlTableModel和tableView控件实现todolist工作待办的查询、新增、修改、删除和导出功能

1、界面设计

界面支持筛选查询、新增、删除和导出功能。先上图。
工作计划界面

  1. 第一行为筛选查询字段,实现查询功能:

日期范围为comboBox,预设为全部、本日、本周、上周、本月、上月、本年、本年之前。

程度为comboBox,根据重要和紧急程度分为:

  • 重要紧急,该部分任务优先处理
  • 不重要紧急,次之
  • 重要不紧急,再次之
  • 不重要不紧急 ,最后处理

事项为lineEdit,支持通过输入文本模糊匹配查询。

  1. 第二行为tableview控件,展示查询结果和支持直接修改数据库。
  2. 第三行为toolButton,分别实现新增记录、删除记录和导出任务功能。

2、实现todolist查询

  1. 新建QSqlTableModel实例todomodel。QSqlTableModel类提供了一个可读写单张SQL表的可编辑数据模型。支持修改,插入,删除,查询,和排序。EditStrategy使用OnFiledChange策略实现编辑功能。
self.todomodel = QSqlTableModel()
self.todomodel.setTable("todolist")       self.todomodel.setEditStrategy(QSqlTableModel.OnFieldChange)
  • 1
  • 2

setEditStrategy各取值含义如下:
QSqlTableModel.OnFieldChange,一改动马上提交数据库
QSqlTableModel.OnRowChange,当前行号变化再提交数据库
QSqlTableModel.OnManualSubmit,默认值,手动提交submitAll()修改才生效。

  1. 默认情况下,QSqlTableModel查询返回所有记录。可通过setFilter()实现sql中where语句的功能,即设置查询过滤条件。查询条件要转化为Sqlite3数据库所能识别的过滤语句,特别是要处理各类日期字典。

本日:date(pdate) = date(‘now’)
本周:date(pdate) >= date(‘now’,‘weekday 1’,’-7 day’))
上周:(date(pdate) >= date(‘now’,‘weekday 1’,’-14 day’) and date(pdate) < date(‘now’,‘weekday 1’,’-7 day’))
本月:(date(pdate) >= date(‘now’,‘start of month’))
上月:(date(pdate) >= date(‘now’,‘start of month’,’-1 month’) and date(pdate) < date(‘now’,‘start of month’))
本年:(date(pdate) >= date(‘now’,‘start of year’))
本年以前:(date(pdate) < date(‘now’,‘start of year’))

        # 2、业务条件转换为查询过滤语句。
        ##2.1文本模糊匹配
        sql1 = "(content like '%{}%')".format(scontent)
        filterlist = sql1
        ##2.2待办事项建立日期范围。
        if sdaterange in [1, 2, 3, 4, 5, 6, 7]:
            if sdaterange == 1:  # 本日
                sql2 = "(date(pdate) = date('now'))"
            elif sdaterange == 2:  # 本周
                sql2 = "(date(pdate) >= date('now','weekday 1','-7 day'))"
            elif sdaterange == 3:  # 上周
                sql2 = "(date(pdate) >= date('now','weekday 1','-14 day') and date(pdate) < date('now','weekday 1','-7 day'))"
            elif sdaterange == 4:  # 本月
                sql2 = "(date(pdate) >= date('now','start of month'))"
            elif sdaterange == 5:  # 上月
                sql2 = "(date(pdate) >= date('now','start of month','-1 month') and date(pdate) < date('now','start of month'))"
            elif sdaterange == 6:  # 本年
                sql2 = "(date(pdate) >= date('now','start of year'))"
            elif sdaterange == 7:  # 去年及以前
                sql2 = "(date(pdate) < date('now','start of year'))"
            filterlist = filterlist + " and " + sql2
        else:
            sql2 = ''
        ##2.3待办事项状态。
        if sfinstatus in [1, 2]:
            sql3 = "(finstatus={})".format(sfinstatus)
            filterlist = filterlist + " and " + sql3
        else:
            sql3 = '
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/135069
推荐阅读
相关标签
  

闽ICP备14008679号