这是我参与「第五届青训营 」伴学笔记创作活动的第 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在服务器上定期执行,用于更新单词地复习时间,具体详见后面内容,内容链接如下:
- get_coll_date()用于读取单词地收录时间