weixin_43405952 2024-08-11 20:28 采纳率: 80.6%
浏览 4

这段python数据库代码很奇怪

先上代码:


```python
    def cxxsp(self,ks,js):#查询销售分类汇总
        db=sqlite3.connect("/Users/apple/Desktop/kw/kw.db")
        c=db.cursor()
        p=c.execute("select ss.pm,ss.hszj,sp.fl from ss,sp where ss.pm=sp.pm and ss.sj>=? and ss.sj<=?",(ks,js))
        #p.fetchall()
        for p1 in p:
            c.execute("insert into flhz_ls (pm,hszj,fl)values(?,?,?)",(p1[0],p1[1],p1[2]))
        p2=c.execute('select fl,sum(hszj) from flhz_ls')
        #p2.fetchall()
        for f in p2:
            print(str(f[0])+":"+str(f[1]))
        db.commit()
        db.close()   

在运行的过程中发现插入表flhz_ls的数据只有一行,然而翻查数据体p,有不止一行数据的,感觉上第一个循环语句没有循环的样子。请问这是为什么呢?

  • 写回答

3条回答 默认 最新

  • 一直免费一直爽 2024-08-11 20:29
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这个问题是由于你在c.execute()方法中设置了两个参数:ksjs。这导致了两次查询操作,而不是一次。如果你想要一次性执行所有的查询并插入数据到表flhz_ls,你需要将这两个参数合并成一个字符串,并传递给c.execute()

    例如:

    def cxxsp(self, ks, js):
        db = sqlite3.connect("/Users/apple/Desktop/kw/kw.db")
        c = db.cursor()
    
        sql = "SELECT ss.pm, ss.hszj, sp.fl FROM ss, sp WHERE ss.pm=sp.pm AND ss.sj >= ? AND ss.sj <= ?"
        params = (ks, js)
    
        c.execute(sql, params)
        rows = c.fetchall()
    
        for row in rows:
            c.execute(
                "INSERT INTO flhz_ls (pm, hszj, fl) VALUES (?, ?, ?)",
                tuple(row),
            )
    
        db.commit()
        db.close()
    

    现在,这个函数应该能够正确地处理所有查询结果并执行插入操作。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 8月11日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?