zoukankan      html  css  js  c++  java
  • 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.分解,腐烂
  • 相关阅读:
    java中&和&&是怎么运算的
    struts中ActionForward 使用mapping.findForward如何传递get参数
    EL表达式_详解
    JSTL标签_详解
    inner join, left join, right join, full join 的区别
    CentOS7部署FastDFS+nginx模块
    一个实例明白AutoResetEvent和 ManulResetEvent的用法
    C#防止在画面上闪烁的Button
    C#中给Label控件设置BackgroundImage属性
    浅析C#异步操作
  • 原文地址:https://www.cnblogs.com/yangjian319/p/9111500.html
Copyright © 2011-2022 走看看