day25-20180529笔记
笔记:复习Python3操作Mysql新建表、插入数据、查询数据
一、复习Python3操作Mysql新建表、插入数据、查询数据
什么是 PyMySQL?
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
PyMySQL 安装
在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。
PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。
如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL:
$ pip install PyMySQL
如果你的系统不支持 pip 命令,可以使用以下方式安装:
1、使用 git 命令下载安装包安装(你也可以手动下载):
$ git clone https://github.com/PyMySQL/PyMySQL $ cd PyMySQL/ $ python3 setup.py install
注意:请确保您有root权限来安装上述模块。
安装的过程中可能会出现
"ImportError: No module named setuptools"
的错误提示,意思是你没有安装setuptools,你可以访问https:
/
/
pypi.python.org
/
pypi
/
setuptools 找到各个系统的安装方法。
Linux 系统安装实例:
$ wget https://bootstrap.pypa.io/ez_setup.py
$ python3 ez_setup.py
数据库连接
连接数据库前,请先确认以下事项:
- 创建数据库 sqlalchemy
- 在sqlalchemy数据库中创建了表 dictionary
- dictionary表字段为 id(主键), key和 value。
- 连接数据库sqlalchemy使用的用户名为 "user1" ,密码为 "123456",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。
- 在你的机子上已经安装了 Python MySQLdb 模块。
mysql> CREATE DATABASE IF NOT EXISTS sqlalchemy DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
mysql> flush privileges;
mysql> grant all on *.* to user1 identified by '123456';
创建表
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/5/30 22:11 # @Author : yangyuanqiang # @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 engine = create_engine('mysql+pymysql://user1:123456@192.168.3.11/sqlalchemy?charset=utf8') 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) print(Table)
以上实例输出的结果
<class 'sqlalchemy.sql.schema.Table'>
查看数据库
mysql> show tables; +----------------------+ | Tables_in_sqlalchemy | +----------------------+ | dictionary | +----------------------+ 1 row in set (0.00 sec) mysql>
插入数据
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/5/30 22:11 # @Author : yangyuanqiang # @File : insertdata.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://user1:123456@192.168.3.11/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() 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() 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()
统计插入的数据总数
mysql> select count(*) from dictionary; +----------+ | count(*) | +----------+ | 7988 | +----------+ 1 row in set (0.00 sec) mysql>
查询数据,模糊匹配查询
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/5/30 22:12 # @Author : yangyuanqiang # @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://user1:123456@192.168.3.11/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:") result =session.query(Dictionary).filter(Dictionary.key.like("%{0}%".format(word))).all() for each in result: print(each.id, each.key, each.value)
以上实例输出的结果,模糊匹配,只要匹配“where”的都会输出来
please input your a word:where 345 anywhere adv.无论何地 2354 elsewhere adv.在别处 2533 everywhere adv.处处,到处 4808 nowhere adv.哪儿也不 6634 somewhere adv.某地,到某处 7826 where adv.哪里 7827 whereabouts n.下落 7828 whereas conj.而,却 7829 whereby adv.借此 7830 wherein adv.在何处 7831 wherever adv.无论哪里
总结:
1、熟悉SQL语法增、删、改、查;
2、了解数据库表结构;
3、写代码先从简单的开始写,测试,最后再优化代码。