最近需要使用MySQL来存储数据,由于应用场景比较简单, 如果专门用C++或Java来开发难免麻烦, 这里使用python来操作MySQL,简单快捷。
首先搭建python开发环境, 这个很简单, 只需要到python官网 https://www.python.org/ 下载 Python 2.7.14版本, 下载后文件名是python-2.7.14.msi ,双击安装,安装过程中一直下一步即可, 注意勾选添加到环境变量的选项即可, 这里就不再多说。
那么接下来就是搭建MySQL了, 也是到MySQL官网 https://dev.mysql.com/downloads/mysql/5.6.html 下载 MySQL 5.7版本, 下载后文件名为 mysql-installer-community-5.7.19.0.msi, 双击安装, 这里注意一个地方 ,就是设置root的密码, 可以设置成123456, 这个密码一定要记住!!
然后需要安装python支持的MySQL驱动, 到 https://pypi.python.org/pypi/MySQL-python/1.2.5 下载,下载后文件名为 MySQL-python-1.2.5.win32-py2.7.exe, 双击安装即可。这样, 开发环境算是配好了, 接下来来看看如何通过python来操作MySQL。
打开windows的cmd命令窗口, 分别执行以下动作:
# 使用root用户打开mysql程序, 登录密码是123456
mysql -hlocalhost -uroot -p123456
# 显示当前存在的数据库
show databases;
# 创建一个数据库, 名为 test
create database test;
# 使用数据库 test 来操作
use test;
# 在数据库test 中创建一个表 mytable, 有六个元素, 分别是 Date, Num1 - Num5 。 float(m, n) 表示总共有m位, 小数点有n位!!
create table mytable(Date VARCHAR(20), Num1 float(10,2),Num2 float(10,2),Num3 float(10,2),Num4 float(10,2),Num5 float(10,4));
# 显示数据库test的所有表项
show tables;
# 描述当前表项, 可以看到指定表项的列和元素类型
describe mytable;
# 查看当前表项所有的数据内容
select * from mytable;
可以看到,利用MySQL创建了一个数据库test, 并创建了一个表mytable, 当前表中无数据。
在桌面上创建一个csv文件,命名为test123.csv, 添加一行数据:
20170918084900000,19475.88,19530.08,19475.2,19486.88,1.5358
创建一个test..py文件,添加如下内容:
import MySQLdb
import csv
try:
# 打开csv文件, 如果不存在, 则在当前目录下创建一个
csvFile = open('test123.csv','r')
reader = csv.reader(csvFile) # 返回的是迭代类型
# 打开数据库连接, 123456 是密码, test是数据库的名称
db = MySQLdb.connect("localhost","root","123456","test" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
for item in reader:
# SQL 插入语句
sql = 'insert into mytable values ("%s", "%s", "%s", "%s", "%s", "%s")' % (item[0], item[1], item[2], item[3], item[4], item[5])
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# Rollback in case there is any error
db.rollback()
# 关闭数据库连接
db.close()
except Exception as e:
print('Error:', e)
finally:
if csvFile:
csvFile.close()
运行test.py文件后, 再次通过命令行查询, 会发现多了一行数据,如下图:
关于MySQL的操作, 还可以做很多其他的操作,包括删除数据,删除表格等:
# 删除当前表项所有的数据内容
delete from mytable;
# 删除指定的表项
drop table mytable;