Python的MySQL操作
Python标准数据库接口为Python DB-API, Python DB-API为开发人员提供了数据库应用 编程接口。
参考地址:https://wiki.python.org/moin/DatabaseInterfaces 。可以查看python支持数据库的详细列表。不同的数据库需要下载不同的DB-API模块。
DB-API使用流程:
- 引入API模块;
- 获取与数据库的连接
- 执行SQL语句和存储过程
- 关闭数据库连接
windows环境下MySQL的安装
MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python数据库 API 规范 V2.0,基于 MySQL C API 上建立的。
如果是windows系统:登录 https://pypi.python.org/pypi/MySQL-python/1.2.5 找到.exe结尾的包,下载安装。
MySQL分为客户端和服务器端,MySQL安装自带基于DOS命令的客户端和服务器端。
在Python环境下面安装mysql ----有2种按照方式
- Python3.2版本之前的安装方式-----企业已经淘汰,不再使用,但是你必须知道!
- Python3.2以后的安装mysql的方式如下 :---------企业大量使用。
注意: 安装mysql之前。确保win系统上面有Python环境!
- 在cmd找到Python的安装路径
- 进入Python的安装路径
- 通过命令pip install MySQLClient注册安装
备注: 以后软件安装尽量采用注册安装,
注意事项: - 用户名和密码设置root root
- 端口号:MySQL为3306,Oracle为5521。
- 编码格式默认为英文,需要手动修改:utf8,数据库中没有“ - ”、“ * ”等特殊字符
当数据库发生乱码时,是否需要卸载MySQL,重新安装?
**解决方案:**进入mysql的按照目录下面,找到my.ini文件!此文件可以修改mysql的很多配置信息。修改之后重新启动mysqlservice服务。
MySQL的卸载
- 进入控制面板,删除mysql按照程序包。
- 进入按照目录 ,删除mysql文件
- 进入系统C盘的。win/用户下面找mysql的字样,全部删除!
- 在cmd窗口 : regedit 进入注册表
- 建议大家删除回收站 ,也可以不删除
- 重新启动计算机
SQL语句
- show databases ---------查看存在的数据库名称
- create database python -----创建Python数据库
- use shop ---------切换到当前的shop数据库下面建立表。语法 :use 数据名称
- mysql> delete from UserPython;-------- 删除的是表数据
- mysql> drop UserPython;----删除表,但是如果表里面有数据。直接使用drop,会破坏表结构、表数据。使用drop删除表,应该使用delete先删除数据。再使用drop删除表。
mysql> insert into UserPython(id,name,sex,age)value(1001,'zhangsan','男',30);
#(3):mysql插入值有 3种方式
insert into UserPython(id,name,sex,age)value(1001,'zhangsan','男',30);
#此写法:是将字段和 值就行一一匹配对应,数据安全、数据好维护等--效率高!
#sql底层只执行一次匹配字段
insert into UserPython values(2,'zhangsan','m',30);
#此写法:是将字段和 值不是匹配对应,数据不是很安全、数据不好维护等--效率高!
#sql底层只能寻找和 key 有关系的values ---执行2次以上匹配--不建议
insert into UserPython values('zhangsan','m',30);
#此写法:必须满足id是具有主键Primary key机制
#然后通过id主键去自动匹配数据库的字段对应的value
select * from UserPython;
#备注:在sql优化/查询里面,尽量不要使用 * ---- * 会将数据库的列columns全部加载
柱状图:(未完成)
import os
import pandas
import MySQLdb
import matplotlib
import matplotlib.pyplot as plt
connection = MySQLdb.connect( # 引入db连接 connect()
host='127.0.0.1',
user='root',
passwd='123456',
db='python',
charset='utf8'
)
# 导入数据到MySQL
# 遍历目录,把里面的所有数据入库
rootDir = "F:\\MySQL数据等\\mysql-Python数据分析\\测试数据"
def exeSQL(sql):
print("exeSQL: " + sql)
connection.query(sql)
for fileName in os.listdir(rootDir):
path = os.path.join(rootDir, fileName)
if ".txt" in fileName:
print(path)
path = path.replace("\\", "\\\\")
# 拿到文件名中的时间字段
datetime = fileName[0:8]
tableName = "订购明细" + datetime
# 建表、导入数据到表中
exeSQL("drop table if exists " + tableName)
exeSQL(
"create table " + tableName + "(订单编号 int, 订购日期 datetime, 用户ID int, 产品 char(8), `单价(元)` int, 数量 int, 订购金额 int);")
# mysql将数据导入表的固定语句
exeSQL(
"LOAD DATA LOCAL INFILE '" + path + "' INTO TABLE `" + tableName + "` CHARACTER SET 'UTF8' COLUMNS TERMINATED BY ',' LINES TERMINATED BY '\\n' IGNORE 1 ROWS;")
# 建立日订购统计表
exeSQL("create table if not exists 日订购统计表(统计日期 date, 订购用户数 int, 订购次数 int, 人均订购金额 double, 订购总额 double);")
exeSQL("delete from 日订购统计表 where 统计日期='" + datetime + "';");
exeSQL(
"insert into 日订购统计表 select '" + datetime + "', count(distinct 用户ID), count(用户ID), sum(订购金额)/count(distinct 用户ID), sum(订购金额) from `" + tableName + "`;")
# statDay = pandas.read_sql('select * from 日订购统计表;', con=connection)
# #记得用完要关闭连接
# connection.close()
#
# print('\n日订购统计表数据如下:')
# print(statDay)
#
# #绘图
# font = {
# 'family' : 'SimHei'
# }
#
# matplotlib.rc('font', **font)
# plt.title('折线图')
# plot1 = plt.plot(statDay['统计日期'], statDay['订购用户数'],label = '用户')
# plot2 = plt.plot(statDay['统计日期'], statDay['订购次数'])
# plot3 = plt.plot(statDay['统计日期'], statDay['人均订购金额'])
# plt.show()
# plt.legend(('订购用户数', '订购次数', '人均订购金额'))
s = pandas.read_sql('select * from 日订购统计表;', con=connection)
connection.close()
font = {
'family': 'SimHei'
}
matplotlib.rc('font', **font)
plt.title('柱状图')
plt.xlabel('日期')
width = 2.0
plot1 = plt.bar(s['统计日期'], s['订购次数'], label='次数')
# plot2 = plt.bar(s['统计日期'], s['订购用户数'], label='用户')
# plot3 = plt.bar(s['统计日期']+2*width, s['人均订购金额'],label = '人均')
plt.show()