東引甌越

不断学习, 与时俱进.

嗨,我是孙亚洲(@sunyazhou13),一名来自北国冰城的iOS开发者,也搞过一些mac.现居帝都北京.开发数年有余,没有为往圣续绝学深感惭愧,今2017年开始写博客.望诸位同仁多多指教.


使用Python操作MySQL数据库

前言

为了实现不斷學習 與時俱進周末把大部分时间放在了学习Python上.
在最近的学习中有一些有价值的部分都摘录整理出来放到博客上,以免后续用到的时候忘记时回来翻翻博客.

我是在study.163.com的这个《全栈数据工程师养成攻略》课程中学习的,推荐大家学习一下.

本篇主要内容

主要分为三个大部分

  1. 搭建Web环境
  2. 数据库MySQL的使用方法
  3. 使用Python操作MySQL

搭建Web环境

  • Web环境: Apache、Nginx…
  • Web服务启动中相关配置.

Web环境: Apache、Nginx…

两个平台的相关的下载

MAMP: Mac, Apache, MySQL, PHP

Mac, Apache, MySQL, PHP 缩写MAMP

WAMP: Windows, Apache, MySQL, PHP

Windows, Apache, MySQL, PHP 缩写WAMP

当然还有linux版本这里就不做多介绍了

总之需要安装这个软件进行环境配置的搭建.

我这里用MAMP举例说明一下

打开之后

Web服务启动中相关配置

开启Apatch ServerMySQL Server服务(右上角).
然后点击Perferences,进行本地端口配置.

这里有两种默认配置(红色框选部分)

如果把服务开启的话那么打开浏览器输入:localhost:8888就可以看到相关的效果

localhost == 127.0.0.1

8888是服务的端口

下面这张图可以选择文件根目录

什么意思呢?

就是你把网页的相关文件放到 这个文件夹的话
就会在浏览器上直接浏览.

这张图中间的Open Start Page.

进入到数据库配置相关

配置数据库名称

输入表名

配置数据库表

配置完右侧完成

数据库MySQL的使用方法

  • 基本概念
  • 终端配置Python MySQL
  • Navicat 数据的导出导入
  • 个人的习惯搞法

基本概念

CURD操作:

  • C Create
  • R Read
  • U Update
  • D Delete

这就是数据库相关知识中 增``删``改``查

终端配置Python MySQL

在终端中使用如下指令安装MySQL环境

pip install MySQL-python

我安装的时候出错了

最后执行

brew install mysql-python

然后再去执行pip install MySQL-python

如何测试是否成功

在shell中输入python

执行

import MySQLdb

如果没有错误就是OK的.

这个数据库可视化操作软件大家自行下载吧

打开之后点击左上角点击新建connect 选择MySQL

接着配置数据库的信息

这里的名称就是数据库名称
host地方本地,如果是远程的话,填写ip或者url
port前面我们设置了8889
账号和密码输入root(前面图里面已经看到了账号密码都是一样的)

下面就是连接数据库

下面这张图就是

数据库导出和导入,当然也可以导出导入数据表.

个人的习惯搞法

  • 使用phpmyadmin新建数据库和数据表
  • 使用python插入、读取、更新、修改数据
  • 使用Navicat导出数据库
  • 使用phpmyadmin导入数据库

最后deloy(部署)到线上,这样就可以避免各种错误操作数据库的问题

使用Python操作MySQL

这个没啥就是coding部分,使用之前把点击这里下载这个文本文件

我们用sublime text新建一个text.py文件

#!/usr/bin/env python
# coding:utf8
import sys
reload(sys)
sys.setdefaultencoding("utf8")
import MySQLdb
import MySQLdb.cursors

注意:_test.py最好和douban_movieclean.txt保持在同一个目录这样就不用写路径了

接着创建数据库连接

db = MySQLdb.connect(host='127.0.0.1', user='root', passwd='root', db='douban', port=8889, charset='utf8', cursorclass=MySQLdb.cursors.DictCursor) //1
db.autocommit(True) //2
cursor = db.cursor() //3
fr = open('douban_movie_clean.txt','r') //4
fr.close() //4
cursor.close() //3
db.close() //1

注意 db记得用完关闭,cursor也要记得关闭, fr是文件的读写 和数据库没啥关系也需要记得用完关闭

下面解释一下什么意思

  1. db创建输入库实例,输入参数 host(这里用的是127.0.0.1也可以换成localhost)、passwddbportcharsetcursorclass.
  2. 自动改完提交完成更新数据库
  3. 通过db实例拿到一个连接cursor 每次都通过cursor.execute()执行增删改查操作sql语句
  4. 读取本地的文本文件

大概就是这个意思

读取数据

# Create
# 读取数据
fr = open('douban_movie_clean.txt', 'r')
count = 0
for line in fr:
count += 1
# count表示当前处理到第几行了
print count
# 跳过表头
if count == 1:
continue
# strip()函数可以去掉字符串两端的空白符
# split()函数按照给定的分割符将字符串分割为列表
line = line.strip().split('^')
# 插入数据,注意对齐字段
# execute()函数第一个参数为要执行的SQL命令
# 这里用字符串格式化的方法生成一个模板
# %s表示一个占位符
# 第二个参数为需要格式化的参数,传入到模板中
cursor.execute("insert into movie(title, url, rate, length, description) values(%s, %s, %s, %s, %s)", [line[1], line[2], line[4], line[-3], line[-1]])
# 关闭读文件
fr.close()

通过我们拿到的cursor连接实例来执行cursor.execute()函数进行sql的插入操作.

来看下结果

更新数据

更新数据 比如我想把id=1的记录更新一下title字段和length长度

# Update
cursor.execute("update movie set title=%s, length=%s where id=1", ['孙亚洲', 999])

读取数据

# Read
cursor.execute("select title, length from movie where id=1")
movies = cursor.fetchone()

删除数据

# Delete
cursor.execute("delete from movie where id=%s",[2])

下面看下完成的代码

#!/usr/bin/env python
# coding:utf8
import sys
reload(sys)
sys.setdefaultencoding("utf8")
import MySQLdb
import MySQLdb.cursors
db = MySQLdb.connect(host='127.0.0.1', user='root', passwd='root', db='douban', port=8889, charset='utf8', cursorclass=MySQLdb.cursors.DictCursor)
db.autocommit(True)
cursor = db.cursor()
fr = open('douban_movie_clean.txt','r')
# Create
count = 0
for line in fr:
count += 1
print count
if count == 1:
continue
line = line.strip().split('^')
cursor.execute("insert into movie(title, url, rate, length, description) values(%s, %s, %s, %s, %s)", [line[1], line[2], line[4], line[-3], line[-1]])
fr.close()
# Update
cursor.execute("update movie set title=%s, length=%s where id=1", ['孙亚洲', 999])
# Read
cursor.execute("select title, length from movie where id=1")
movies = cursor.fetchone()
print len(movies)
# print movies[0]
# Delete
cursor.execute("delete from movie where id=%s",[2])
cursor.close()
db.close()

总结

通过学习python操作数据库很有收获,想起了大学李月辉老师教我怎么用java连接数据库.
在工作中我们可能会遇到一大堆数据如何插入到数据等问题,通过学习了本章内容可以很容易的处理批量数据.

关于更多的SQL语句
参考SQL 教程

全文完

最近的文章

NLP分词WordEmbeding

前言学习过程中记录一下python代码 #!/usr/bin/env python# coding:utf8import sysreload(sys)sys.setdefaultencoding('utf8')# 加载包from gensim.models import Word2Vecfrom …

于  python开发 继续阅读
更早的文章

AVAudioSession-Category各种姿势

前言2018新年第一篇, 梳理AVAudioSession的Category,解决音频开发中的各种播放被打断或者首次启动时无声音的问题 开篇由于iOS系统的特殊性,所有App共用一个AVAudioSession所以这个会话是个单例对象.(macOS是支持同时播放多路音频文件) 当遇到插拔耳机,接电 …

于  iOS开发, macOS开发 继续阅读