写操作练习:
创建数据库 dict,数据库中创建数据表 words 字段为 : id word mean
编写一个程序,将dict.txt单词本中的单词存储到这个数据表里
其中dict,txt文件的路径在’D:/wjs/第二阶段/01-MySQL/doc/dict.txt’
在库为exercise下创建名为words的表
create table words(
id int primary key auto_increment,
word varchar(30),
mean varchar(512)
);
import pymysql
class Dict:
def __init__(self):
self.db=pymysql.connect(
host='localhost',
port=3306,
user='root',
password='123456',
database='exercise',
charset='utf8'
)
self.cur=self.db.cursor()
def get_dict(self):
data=[]
with open('D:/wjs/第二阶段/01-MySQL/doc/dict.txt','r') as file:
for line in file:
tmp=line.split(' ',1)
data.append((tmp[0],tmp[1].strip()))
return data
def sql01(self):
try:
sql='insert into words (word,mean) ' \
'values (%s,%s)'
data=self.get_dict()
self.cur.executemany(sql,data[:5])
except Exception as e:
print(e)
self.db.rollback()
else:
self.db.commit()
def close(self):
self.cur.close()
self.db.close()
if __name__=='__main__':
dict=Dict()
dict.sql01()
dict.close()
ps:需要注意的点是,data列表被定义在get_dict函数内部而不是构造函数内部的原因是为了将其定义为一个局部变量。这样做的目的是为了在get_dict函数结束时清除变量,并且仅在需要时创建和使用它。
如果将data=[]定义为构造函数__init__中的实例变量,那么在每次创建Dict对象时都会创建一个新的空列表。这样可能会导致内存浪费,因为每个实例都会单独保存一个空列表。
另外,由于get_dict函数是用于从文件中读取数据并转换成元组的逻辑,因此将data=[]放在函数内部更加合适,以便将逻辑封装在一个函数中,并在需要时返回结果。这样也增加了代码的可读性和维护性。
总之,将data=[]定义在get_dict函数内部是一个更好的选择,因为它更符合代码的逻辑和设计需求。