在Python中,Pandas库是一个强大的数据分析工具,而与MySQL数据库的交互则可以使用pymysql或SQLAlchemy库。本实例主要展示了如何使用Pandas从MySQL数据库中读取数据以及将数据插入到新的表中。以下是对这个实例的详细解释:
导入所需的库:
```python
import pandas as pd
import pymysql
import sys
from sqlalchemy import create_engine
```
`pandas`用于数据处理,`pymysql`是Python连接MySQL数据库的库,`sys`用于系统退出,`sqlalchemy`则提供了ORM(对象关系映射)功能,方便与数据库进行交互。
接着,定义一个函数`read_mysql_and_insert()`来执行读取和插入操作:
```python
def read_mysql_and_insert():
# 连接MySQL数据库
conn = pymysql.connect(host='localhost', user='user1', password='123456', db='test', charset='utf8')
# 创建SQLAlchemy引擎
engine = create_engine('mysql+pymysql://user1:123456@localhost:3306/test')
# 从数据库中读取数据
sql = 'select * from sum_case'
df = pd.read_sql(sql, con=conn)
# 将数据写入新的表
df.to_sql(name='sum_case_1', con=engine, if_exists='append', index=False)
# 关闭数据库连接
conn.close()
print('ok')
```
在这个函数中,首先使用`pymysql.connect()`建立到MySQL服务器的连接,然后通过`create_engine()`创建SQLAlchemy引擎,这允许我们使用SQLAlchemy的方法与数据库进行交互。接下来,执行SQL查询(`select * from sum_case`)获取`sum_case`表中的所有数据,并将其存储在Pandas DataFrame对象`df`中。使用`df.to_sql()`方法将DataFrame内容写入新的`sum_case_1`表中,`if_exists='append'`表示如果表已存在,则追加数据,`index=False`表示不将DataFrame的索引写入数据库。
在数据库中,有两个表:
1. `sum_case`表:
```sql
CREATE TABLE `sum_case` (
`type_id` tinyint(2) DEFAULT NULL,
`type_name` varchar(5) DEFAULT NULL,
KEY `b` (`type_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
2. `sum_case_1`表:
```sql
CREATE TABLE `sum_case_1` (
`type_id` tinyint(2) DEFAULT NULL,
`type_name` varchar(5) DEFAULT NULL,
KEY `b` (`type_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
这两个表的结构相同,都包含`type_id`和`type_name`两个字段,`type_name`上创建了一个名为`b`的索引。
在执行程序之前,需要在MySQL中创建`user1`用户并赋予相应的权限:
```sql
GRANT SELECT, UPDATE, INSERT ON test.* TO 'user1'@'localhost' IDENTIFIED BY '123456';
```
这使得`user1`用户可以在本地主机上对`test`数据库的所有表进行读、写和插入操作。
初始化`sum_case`表的数据:
```sql
INSERT INTO sum_case (type_id, type_name) VALUES (1, 'a'), (2, 'b'), (3, 'c');
```
运行`read_mysql_and_insert()`函数后,`sum_case`表中的数据会被读取并追加到`sum_case_1`表中。
这个实例展示了如何利用Pandas和SQLAlchemy在Python中高效地处理MySQL数据库中的数据,包括数据的读取和写入操作,这对于数据分析师和数据科学家来说是非常常见的任务。通过这种方式,可以方便地进行数据的提取、转换和加载(ETL)流程,为后续的数据分析和处理提供便利。