python SQLAlchemy复习

 

下面的代码主要使用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.分解,腐烂

 

posted @ 2018-05-30 16:09  quartzite  阅读(259)  评论(0编辑  收藏  举报