练习 :
把字典文本dictionary.txt 的内容写入数据表中,再通过模糊查询找到相关的单词。
dictionary.txt 的内容格式为:
abandon v.抛弃,放弃
abandonment n.放弃
abbreviation n.缩写
abeyance n.缓办,中止
abide v.遵守
ability n.能力
able adj.有能力的,能干的
abnormal adj.反常的,变态的
aboard adv.船(车)上
abolish v.废除,取消
abolition n.废除,取消
abortion n.流产
abortive adj.无效果的,失败的
about prep.关于,大约
above prep.在...之上,高于
above-mentioned adj.上述的
abreast adv.并肩,并列
abridge v.省略,摘要
abroad adv.国外,海外
abrogate v.取消,废除
abrogation n.取消,废除
。。。
还有很多
。。。
创建数据表:
#创建数据表
from sqlalchemy import create_engine,MetaData,Table,Column,Integer,String
#创建链接
engine = create_engine('mysql+pymysql://root:123456@localhost/thinkcmf')
#获取元数据
metadata = MetaData(engine)
#创建表语句
teacher = Table('dictionary',metadata,
Column('id',Integer,primary_key=True),
Column('keyname',String(50)),
Column('value',String(50))
)
#执行 创建表
metadata.create_all(engine)
将dictionary.txt的内容逐条写入数据表中
####将文件中的数据写入表中
#创建链接 定义对象基类
from sqlalchemy import Column,String,create_engine,Integer
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
#初始化数据链接
engine = create_engine('mysql+pymysql://root:123456@localhost/test')
#创建DBSession类型
DBsession = sessionmaker(bind=engine)
session = DBsession()
#定义表的类对象
class Dictionary(Base):
#表的名字
__tablename__ = "dictionary"
__table_args__ = {
'mysql_engine': 'InnoDB',
'mysql_charset': 'utf8mb4'
}
#表的结构
id =Column(Integer,primary_key=True)
keyname = Column(String(50))
value = Column(String(50))
#读取文件 定义一个读取文件类
import codecs
class ReadData(object):
def __init__(self,dataFile):
self.dataFile = dataFile
def make_data_to_str(self):
with codecs.open(self.dataFile, encoding='utf-8') as file:
for(num,value) in enumerate(file):
# 空格 分开组成list
line=value.strip().split()
#写入表中
diction = Dictionary(id=num+1,keyname=line[0],value=line[1].encode('utf-8'))
session.add(diction)
session.commit()
filedata = ReadData('dictionary.txt')
filedata.make_data_to_str()
session.close()
【备注】如果在写入过程出现中文乱码的问题:UnicodeEncodeError: 'latin-1' codec can't encode characters in position 64-66: ordinal not in range(256)
则需要确保数据库和数据表的编码方式、以及python的编码方式是否是utf-8
,如果还不能解决,则需要在初始化数据链接的时候加上
charset=utf8
,例如:
#初始化数据链接 解决中文编码错误的问题
engine = create_engine('mysql+pymysql://root:123456@localhost/test?charset=utf8')
输入关键字,实现模糊查询
from sqlalchemy import create_engine, Integer, Column, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql+pymysql://root:123456@localhost/test')
Base = declarative_base()
class Dictionary(Base):
__tablename__ = 'dictionary'
id = Column(Integer, primary_key=True)
keyname = Column(String(50))
value = Column(String(50))
DBSession = sessionmaker(bind=engine)
session = DBSession()
word = input("please input your a word:")
result =session.query(Dictionary).filter(Dictionary.key.like("%{0}%".format(word))).all()
for each in result:
print(each.id, each.key, each.value)
网友评论