wp231957 发表于 2022-9-5 15:27:49

不知道咋优化(关于批量UPDATE的),狠慢狠慢的(虽然确实达到了我的要求)

其实我的要求狠简单,就是假设数据库有100个记录,那我就按顺序update 某个字段即可,
可是update却要求 必须要有where字句我真的不需要where啊   有个replace语句更不靠谱

def update():
    base="0123456789ABCDEF"
    conn=sql.connect("mac.db")
    c=conn.cursor()
    macres=c.execute("select mac from main where mac='1';")
    recoders=len(list(macres))
    data=[]   #这个data里面装的是若干个互不重复的MAC地址
    while len(data)<recoders:
      r="".join(random.sample(base,6))
      s="F07959"+r
      if s not in data:
            data.append(s)

    #print(data)
    allres=c.execute("select * from main where mac='1';" )
    idx=0
    sqltxt=""
    for x in allres:    #这个循环拼接update语句
      zh=x
      sqltxt+="update main set mac='"+data+"' where zh='"+zh+"';"
      idx+=1
    c.executescript(sqltxt)#执行拼接好的大量update语句
    conn.commit()   
    conn.close()
    tkinter.messagebox.showinfo("提示","批量替换成功,请进入查询模块查询信息")

狠慢狠慢的执行成功,慢到我点击那个按钮之后,那个按钮一直是按的状态,老半天才弹出

ba21 发表于 2022-9-5 15:58:29

换个别的模块试试吧。

wp231957 发表于 2022-9-5 16:04:47

ba21 发表于 2022-9-5 15:58
换个别的模块试试吧。

是py自带的sqlite不友好吗?

kogawananari 发表于 2022-9-5 16:40:00

有多慢。。100条应该一瞬间吧

wp231957 发表于 2022-9-5 16:51:44

kogawananari 发表于 2022-9-5 16:40
有多慢。。100条应该一瞬间吧

我是130+   大约1-2分钟吧具体也没查

kogawananari 发表于 2022-9-5 16:54:31

wp231957 发表于 2022-9-5 16:51
我是130+   大约1-2分钟吧具体也没查

db文件和要覆盖的电子表格发我我试试 我不信这么慢 但是代码看不出来{:10_266:}

wyh551202 发表于 2022-9-5 16:55:51

你表中就只有一列mac地址吗,有没有主键之类的

wp231957 发表于 2022-9-5 17:03:38

kogawananari 发表于 2022-9-5 16:54
db文件和要覆盖的电子表格发我我试试 我不信这么慢 但是代码看不出来

刚才重新还原了一下数据,重头做了一下,用秒表测试 15-16秒之间
你还要代码吗用不用发了??

wp231957 发表于 2022-9-5 17:04:34

wyh551202 发表于 2022-9-5 16:55
你表中就只有一列mac地址吗,有没有主键之类的

有啊,有个id键设置为非空不能重复
mac 非空
zh 非空
mc 非空
flag 非空

kogawananari 发表于 2022-9-5 17:35:44

wp231957 发表于 2022-9-5 17:03
刚才重新还原了一下数据,重头做了一下,用秒表测试 15-16秒之间
你还要代码吗用不用发了??

要得 15秒也离谱

wp231957 发表于 2022-9-5 17:41:50

kogawananari 发表于 2022-9-5 17:35
要得 15秒也离谱

好的,明天发,今天回家了

wp231957 发表于 2022-9-6 08:39:44

kogawananari 发表于 2022-9-5 17:35
要得 15秒也离谱

现在初始化完毕了,(导入数据这个模块不用做了)
你可以先点击一下查询数据 按钮   发现前两项都有数据,第三项没有数据这就对了,
然后点击 批量修改mac 按钮完成后,点击查询数据按钮发现mac 一项 有数据   这就对了

如果中途误操作,数据库乱了,可以 copy mac.db.bakmac.db就恢复现场了,不过此时 需要做导入数据这个模块 (选择压缩包里面的文本文件就OK)

kogawananari 发表于 2022-9-6 10:07:17

wp231957 发表于 2022-9-6 08:39
现在初始化完毕了,(导入数据这个模块不用做了)
你可以先点击一下查询数据 按钮   发现前两项都有 ...

我试了一下 啥也没改点批量修改是一瞬间啊{:10_247:} 没啥问题

wp231957 发表于 2022-9-6 10:09:35

kogawananari 发表于 2022-9-5 17:35
要得 15秒也离谱

那就先这样吧,反正我这个是一次性模块
以后就是单条记录修改,就不会慢了

kogawananari 发表于 2022-9-6 10:10:31

kogawananari 发表于 2022-9-6 10:07
我试了一下 啥也没改点批量修改是一瞬间啊 没啥问题

不过好像有点小bug 最后有序号重复的

wp231957 发表于 2022-9-6 10:13:22

kogawananari 发表于 2022-9-6 10:10
不过好像有点小bug 最后有序号重复的

不能吧,id设的是主键,再说我代码也控制了啊

kogawananari 发表于 2022-9-6 10:17:28

wp231957 发表于 2022-9-6 10:13
不能吧,id设的是主键,再说我代码也控制了啊

你发我的 我先点一次查询 再点一次批量修改 再点查询 就有重复的

wp231957 发表于 2022-9-6 10:26:04

kogawananari 发表于 2022-9-6 10:17
你发我的 我先点一次查询 再点一次批量修改 再点查询 就有重复的

谢谢,我再好好看看,虽然并不影响啥

wp231957 发表于 2022-9-8 10:11:44

kogawananari 发表于 2022-9-6 10:17
你发我的 我先点一次查询 再点一次批量修改 再点查询 就有重复的

搞定了,在插入数据前,先清空tree控件里面的内容
页: [1]
查看完整版本: 不知道咋优化(关于批量UPDATE的),狠慢狠慢的(虽然确实达到了我的要求)