下面的代码主要使用SQLAlchemy的ORM思想实现查询单词的功能:
实现输入一个单词,查询出与输入单词接近的单词以及单词的意思。
主要有以下三步:
1、创建数据表
2、插入数据
3、查询数据
1、创建数据表
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2018/5/30 14:23 # @Author: yangjian # @File : createtable.py import codecs from sqlalchemy import Column, MetaData, Table from sqlalchemy import Integer from sqlalchemy import String from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # 参数分别是:指定哪种数据库类型、数据库用户名、密码、数据库所在主机IP、数据库名 engine = create_engine('mysql+pymysql://yangjian:123456@100.106.106.220/sqlalchemy') # MetaData类主要用于保存表结构,连接字符串等数据,是一个多表共享的对象 # 绑定一个数据源的metadata metadata = MetaData(engine) # 定义表名、表结构 dictionary = Table('dictionary', metadata, Column('id', Integer, primary_key=True), Column('key', String(50)), Column('value', String(50)) ) # 创建表 metadata.create_all(engine)
2、插入数据
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2018/5/30 14:25 # @Author: yangjian # @File : insertdatas.py import codecs from sqlalchemy import Integer, Column, String, create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker engine = create_engine('mysql+pymysql://yangjian:123456@100.106.106.220/sqlalchemy?charset=utf8') # Declarative,一是描述我们要处理的数据库表的信息,二是将我们的Python类映射到这些表上。 # 基类declarative_base()含有ORM映射中相关的类和表的信息。 # Dictionary是从基类派生出来的类,在这里可以定义将要映射到数据库表上的属性(表名、列名及列类型等) Base = declarative_base() class Dictionary(Base): __tablename__ = 'dictionary' id = Column(Integer, primary_key=True) key = Column(String(50)) value = Column(String(50)) # 通过sessionmaker方法创建一个Session工厂,然后在调用工厂的方法来实例化一个Session对象。 DBSession = sessionmaker(bind=engine) session = DBSession() # 定义一个类对源数据进行处理,并存入到表中 class HandleData(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): line = value.strip().split() # 这里的Dictionary是在上面由基类派生出来的 diction =Dictionary(id=num+1, key=line[0], value=line[1]) session.add(diction) session.commit() handleData = HandleData('dictionary.txt') handleData.make_data_to_str() session.close()
3、查询数据
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2018/5/30 14:28 # @Author: yangjian # @File : selectData.py 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://yangjian:123456@100.106.106.220/sqlalchemy?charset=utf8') Base = declarative_base() class Dictionary(Base): __tablename__ = 'dictionary' id = Column(Integer, primary_key=True) key = Column(String(50)) value = Column(String(50)) DBSession = sessionmaker(bind=engine) session = DBSession() # 输入要查询的单词 word = input("please input your a word:") # 查询数据库,用到了sql查询中的like result =session.query(Dictionary).filter(Dictionary.key.like("%{0}%".format(word))).all() for each in result: print(each.id, each.key, each.value)
执行程序
python selectData.py please input your a word:compose 1370 compose v.由...组成,作曲 1371 composed adj.镇静的 1372 composer n.作曲家 1804 decompose v.分解,腐烂