当前位置: 首页 > news >正文

关于sqlite

虽然做python也有好多年了,但是python的入门是从深度学习的需要而开始的,所以对于python常见的一些应用反而不熟甚至没用过,比如爬虫,比如数据库,甚至pandas都不熟,如果能with open再按行读取的话,必然是我的唯一选择,除非字段中出现了换行。。。

这次的问题是,想要保存下ai的QA问答,之前直接上传到网络数据库,是的,我是用的阿里的sdk完成增删改查的,直到同事发现,原来人家直接支持sql语句,那我不懂,也不想懂。但后来觉得这么点东西,而且是公司内部的一个ai使用,没啥保存在云端的必要,还费钱,就琢磨着保存在本地。

写了这么一个类。

import sqlite3 as sl # import  time
# def timer(func):
#     def func_in(*args, **kwargs):
#         start_time = time.time()
#         res = func(*args, **kwargs)
#         end_time = time.time()
#         result = end_time - start_time
#         print(f'{func.__name__} cost time is %.3fs' % result)
#         return res
#     return  func_inclass localSQL:def __init__(self, dbName='QA.db', tableName='qa', title='(chat_id, user_id, user_name, Q, A, created_time)'):self.dbName = dbNameself.con = sl.connect(dbName)self.tableName = 'danmu'self.title = titledef creatTable(self, content='(chat_id TEXT,user_id TEXT,user_name TEXT, Q TEXT, A TEXT, created_time TEXT)'):tableContent = contentwith self.con: self.con.execute(f"CREATE TABLE {self.tableName} {tableContent};")# @timerdef insertDB(self, content:tuple):sql = f"INSERT INTO {self.tableName} {self.title} values{str(content)}"self.con.execute(sql)self.con.commit()return 0def insertListDB(self, content:list):sql = f"INSERT INTO {self.tableName} {self.title} values({(('?,')*len(self.title.split(',')))[:-1]})"self.con.executemany(sql, content)self.con.commit()return 0def updateDB(self, title:str, content:str, condition:str):sql = f"UPDATE {self.tableName} SET {title}=\"{content}\" WHERE {condition}"self.con.execute(sql)self.con.commit()return 0def selectDB(self, condition):with self.con:data = self.con.execute(f"SELECT * FROM {self.tableName} WHERE {condition}") return tuple(data)if __name__ == "__main__":ss = localSQL()ss.creatTable()# data = ss.selectDB('Q=0')# data = sorted(data, key=lambda x:x[1])# for _ in data:#     print(_)# # ss.insertListDB([# #         ('1', '2', '3', '4', '5', '6'), # #         ('1', '2', '3', '4', '5', '6'), # #         ('1', '2', '3', '4', '5', '6')# #    ])# ss.insertDB(("20251110_174128_5e9b1f32eee445118e54" ,"4165382228676092", "lake",  "nihao a " , "", "2025"))# ss.updateDB('A', '123', 'chat_id=\"20251110_174128_5e9b1f32eee445118e54\"')

临时去掉了一些数据代码,导致可能有bug哈,懒得查了。

这个库最开始应用在代码中,发现执行到的时候,就没有然后了,程序也没有死,但是也没有执行,经过各种排查,都没有查到到底是怎么了。

最后发现是传进来的参数,时间那里,我是直接传了一个datetime的函数,结果写错了,没挂的原因可能是由于在线程中,其中没有打印也可能是因为此。最后的排查,发现有两点想要记录:
一、线程中的错误或者别的什么原因不会输出在终端,此时可以通过try,通过traceback.print_exc()来输出错误,什么原理没有深究,不过这个一查就能查到,后续有这种难解的问题,可以试试。

二、这个库,创建对象和进行操作的时候,需要在同一个线程中,也就是有同一个线程id,比如我在主线程创建,然后调用的时候,会报错,错误提示很清晰,就不赘述了,所以最后改成,需要插入或者更新的时候,立即创建一个对象,完了后销毁就行了,不过这样不知道有没有别的问题。

以上两点,对于老手来说,或者会觉得有失偏颇,或者太菜了,这个,我也觉得,思考深度不够,不过作为一个记录贴,这样也差不多了。

http://www.dtcms.com/a/600876.html

相关文章:

  • 【C语言】深入理解指针(三)
  • BHYRA:当金融的信任,开始由收益来证明
  • 安装paddle_ocr踩坑(使用PP-OCRv5_server_rec)
  • ClickHouse查看数据库、表、列等元数据信息
  • 场外衍生品系统架构解密:TRS收益互换与场外个股期权的技术实现与业务创新
  • PQ:软件的UX - 快速分析并提议改进
  • MoonBit Pearls Vol.15: 使用 MoonBit 和 Wassette 构建安全的 WebAssembly 工具
  • 旅游机票网站建设2022年时事新闻摘抄
  • 【Linux网络】基于UDP的Socket编程,实现简单聊天室
  • IntelliJ IDEA 快捷键全解析与高效使用指南
  • openGauss 实战手册:gsql 常用命令、认证配置与运维工具全解
  • 如何入门Appium-移动端自动化测试框架?
  • 解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
  • 【ZeroRange WebRTC】KVS WebRTC 示例中的 HTTP 通信安全说明
  • 软件测试之单元测试知识总结
  • 如何更改asp网站自定义产品顺序网站推广优化建设方案
  • 手机网站优点linux服务器wordpress
  • HPC性能新纪元!AWS Hpc7g实例: Graviton3E芯片开启200Gbps超算之旅
  • LeetCode 422 - 有效的单词方块
  • windows docker 配置镜像
  • 《数据结构:从0到1》-11-字符串与模式匹配
  • 【轴承故障诊断】基于SE-TCN和SE-TCN-SVM西储大学轴承故障诊断研究(Matlab代码实现)
  • 容器云质量加固方案
  • HarmonyOS OCR文字识别应用开发:深度指南与分布式实践
  • C语言 | LeetCode 414. 第三大的数
  • 360优化大师官方网站网站运营成本
  • 北京网站seo优化推广招聘网最新招聘信息网
  • 【代码】TorchCFM(Conditional Flow Matching library)代码入门
  • C++主流日志库深度剖析:从原理到选型的全维度指南
  • CAD/CASS 无法复制到剪贴板