MySQL基础入门——MySQL与R语言、Python交互
MySQL作为z最为流行的关系型数据库管理平台之一,与绝大多数数据分析工具或者编程语言都有接口,今天这一篇分享如何将MySQL与R语言、Python进行连接。
R语言中与SQL管理平台通讯的接口包有很多,可以根据自己使用的数据库平台类型以及习惯,挑选合适的接口包。因为我个人笔记本使用的MySQL平台,所以本篇仅以MySQL为例分享。(如果你需要其他平台的接口导入方案,可以直接在csdn博客上搜关键字,有很多博客资料可以参考)。
我习惯使用的接口包是RMySQL,里面的核心函数主要涉及数据库连接,数据读写,数据查询三个方面,以下是三个方面的内容实例。
R与数据库的连接: library(“RMySQL”) library(“magrittr”)
数据库连接语句:
conn <- dbConnect( MySQL(), #数据库平台类型 dbname=”db1”, #数据库名称 username=”root”, #登录账号(MySQL初始安装时设置的账号) password=”**“, #登录密码(MySQL初始安装时设置的密码) host=”127.0.0.1”, #地址 port=3306 #端口号 )
summary(conn) #查看连接信息:
User: root Host: 127.0.0.1 Dbname: db1 Connection type: 127.0.0.1 via TCP/IP
dbGetInfo(conn) #查看连接详细信息(列表形式) $host ‘127.0.0.1’ $user ‘root’ $dbname ‘db1’ $conType ‘127.0.0.1 via TCP/IP’ $serverVersion ‘5.7.17-log’ $protocolVersion 10 $threadId 11 $rsId
dbListTables(conn) #查看该数据库连接内的表信息 ‘birthdays’ ‘company’ ‘dataanalyst’ ‘foodranking’ ‘foodtypes’ ‘orderinfo’ ‘str_date’ ‘userinfo’
dbDisconnect(conn) #关闭连接(数据通讯完成之后再运行)
R语言与MySQL数据库读写:
```r
(mydata <- iris)
dbWriteTable(
conn = conn, #连接名称
name = "mydata", #指定导入后的表名
value = iris, #指定要导入的R内存空间数据对象
row.names = FALSE #忽略行名
) #写表
dbListTables(conn)
'birthdays' 'company' 'dataanalyst' 'foodranking' 'foodtypes' 'mydata' 'orderinfo' 'str_date' 'userinfo'
mydata1 <- dbReadTable(
conn = conn, #连接名称
name = "mydata" #数据库中的表名
) #读表
head(mydata1,10)
以上读写都是一次性操作,不能在读写的同时执行条件筛选等步骤,通常我们需要使用查询方式来获取指定条件的数据并返回数据框。
result1 <- dbSendQuery(conn = conn,
statement = "SELECT * from mydata where `Sepal.Length` between 4 and 5
and `Species` = 'setosa' "
#查询条件
) %>% dbFetch()
#将查询结果返回数据框
head(result1,10)
dbClearResult(result1) #清除查询(释放内存)
这一句清除的是查询,即上一句中的dbSendQuery部分(布包含后面的dbFetch,我只是为了方便一次性输出了)。
dbRemoveTable(conn,"mydata") #删除表
dbListTables(conn)
'birthdays' 'company' 'dataanalyst' 'foodranking' 'foodtypes' 'orderinfo' 'str_date' 'userinfo'
dbDisconnect(conn) #断开连接
Python:
Python与MySQL连接:
from sklearn.datasets import load_iris
import pandas as pd
from sqlalchemy import create_engine
import MySQLdb
conn=MySQLdb.connect(
host="localhost", #地址
user="root", #登录名(同上)
passwd="******", #登录密码(同上)
db="db1", #要连接的数据库名称
charset="utf8" #声明数据编码
)
engine = create_engine('mysql+mysqldb://root:password@localhost:3306/db1?charset=utf8')
#使用 sqlalchemy接口连接连接
Python与MySQL数据读写操作:
Pandas库中有封装过的数据读写函数,可以直接针对连接后的数据进行数据读写,非常方便。
iris = load_iris()
mydata = pd.DataFrame(
iris.data[:,:],
columns=['sepal_length','sepal_width','petal_length','petal_width']
)
mydata.head(10)
#将数据框直接写入MySQL
mydata.to_sql(
name = "iris",
con = engine
)
#直接读取MySQL中的表:
mydata1 = pd.read_sql_table(
table_name= "str_date",
con =engine
)
#通过查询过滤条件获取表数据:
mydata1 = pd.read_sql_query(
sql = "SELECT * from iris where sepal_length between 4 and 5 and petal_width != 0.2 ",
con =engine
)
你可以通过以上MySQLlb接口建立的连接来执行查询操作!
cursor = conn.cursor() #获取操作游标
sql = "SELECT * from iris where sepal_length between 4 and 5 and petal_width != 0.2"
cursor.execute(sql) # 使用execute方法执行SQL语句
cursor.fetchall() #获取查询数据
cursor.close() # 关闭游标
conn.close() # 关闭数据库连接
总觉得MySQLlb的接口使用起来过于复杂,不直观,输出数据也不友好,还好pandas支持sqlalchemy的链接,使用pandas里面的函数可以基本满足写表、读表、执行查询的需要。
以上仅仅是MySQL与R语言、Python交互的基础函数,当然还有更为复杂的增删以及插入命令,如果需要了解详细内容可以参考RMySQL、sqlalchemy库的官方文档。
往期案例数据请移步本人GitHub: https://github.com/ljtyduyu/DataWarehouse/tree/master/File
- Pymongo: TypeError: if no direction is specified, key_or_list must be an instance of list
- Java面试系列19-Struts2
- JS游戏开发,让你的静态人物动起来(来自网路)
- Golang语言websocket源码
- 社团划分——Fast Unfolding算法
- 【PSU】AIX 11g RAC自动打GI PSU5
- 详解自动识别验证码,LSTM大显身手
- 智能算法——PageRank
- 【Go 语言社区】Golang 可变参数的使用
- 【Go 语言社区】Golang源码解读之map
- 一则报警信息所折射出来的诸多问题(r9笔记第14天)
- Java面试系列17-编程题-读取服务器字符、实现序列化、计数器、1000阶乘、n出列问题等
- tensorflow(一)windows 10 64位安装tensorflow1.4与基本概念解读tf.global_variables_initializer
- 容灾切换中的数据库宕机问题简单分析(一) (r9笔记第12天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 词义类比与全局词共现信息不可兼得?基于飞桨实现的GloVe说可以
- MyBatis-plus乐观锁插件
- Jmeter(十九) - 从入门到精通 - JMeter监听器 -上篇(详解教程)
- python---rsa加密根据指数和模生成加密参数模板
- 搞了这么多年终于知道接口和抽象类的应用场景了
- css实现页面加载动画
- 用Dota2“最强”算法PPO完成CarPole和四轴飞行器悬浮任务
- 【pyspark】广播变量のdestroy...
- Flink 参数配置和常见参数调优
- 利用InfluxDB+Grafana搭建Flink on YARN作业监控大屏
- Netty之美--零拷贝
- Netty对ThreadLocal的升级
- 【避坑指南】12.2 新功能优化器统计顾问(Optimizer Statistics Advisor)及常见问题和解决方法
- 初试 Open Service Mesh(OSM)
- K8S 生态周报| runc v1.0-rc92 发布