动手实现一个单词本(Python数据库接口)| 青训营笔记

114 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

为了实现python客户端对数据库的操作,将所需要的数据库操作封装到了一个DataBase类中,类的结构如下:

class DataBase:
    def __init__(self, host, user, password, database, port, **args):
        pass
    def connect_database(self):
        pass
    def insert_single_trans(self, word, dic, api):
        pass
    def insert_single_word(self, word_data):
        pass
    def translation_exists(self, word, api) -> bool:
        pass
    def set_review_date(self):
        pass
    @staticmethod
    def get_coll_date():
        pass
  • 其中init函数用于初始化数据库,包括数据库的主机、用户名、密码、端口等信息,这些信息储存在config.json文件中,可以从中读取并解析出来
  • connect_database函数用于创建一个数据库的连接,根据现有的数据库主机、用户名、密码、端口等信息创建一个到数据库的连接,返回一个db和一个cursor,分别表示数据库连接和当前的操作句柄,储存到DataBase的属性中
  • insert_single_trans函数用于向数据库中插入一条翻译信息,包括单词,翻译API,以及翻译内容(如音标、翻译、近义词、反义词、例句等)和读音文件路径(wav文件路径)结构化组成的json字符串这三项内容
  • insert_single_word用于将一个单词的信息插入数据库中,包括单词的拼写、文章来源、句子原文、收录日期、复习周期类型等
  • 值得注意的是,在将单词的这一系列数据存储到数据库之前,需要对存储内容进行预处理,即采用pymysql模块中converters类中的escape_string函数对需要存入的字符串进行预处理,否则容易出现问题(比如内容中的单双引号导致字符串定界提前结束,内容中的反斜杠等被理解成转移字符等)
  • 总之,经过一系列的处理后,才能将单词的上下文内容和翻译内容安全有效地存储到数据库中,并完整读取出来
  • translation_exists 函数用于判断某一个单词在某个API下地翻译是否存在于数据库中,如果存在则无需重新翻译,反之需要翻译后存入数据库,这个设计可以让软件存储单词地过程中过滤掉很多不必要请求
  • set_review_date在服务器上定期执行,用于更新单词地复习时间,具体详见后面内容,内容链接如下:

    动手实现一个单词本(每日单词更新模块)| 青训营笔记 - 掘金 (juejin.cn)

  • get_coll_date()用于读取单词地收录时间