Python - 处理关系数据库

Python - 处理关系数据库 首页 / 数据科学入门教程 / Python - 处理关系数据库

无涯教程可以连接到关系数据库,以使用 pandas 库用于连接数据库来分析数据。该软件包名为 sqlalchemy ,提供了可在python中使用完整SQL语言函数。

使用Anaconda进行安装非常简单,假设您已安装了Anaconda, 在Anaconda提示窗口中运行以下命令以安装SQLAlchemy软件包。

conda install sqlalchemy

读取数据

将使用Sqlite3作为无涯教程的关系数据库,因为它重量轻且易于使用,尽管SQLAlchemy库可以连接到各种关系源,包括MySql,Oracle和Postgresql和Mssql。 首先创建一个数据库引擎,然后使用SQLAlchemy库的 to_sql 函数连接到数据库引擎。

在下面的示例中,通过使用 to_sql 函数从已经通过读取csv文件创建的数据帧中创建关系表,然后,使用pandas的 read_sql_query 函数执行并捕获各种SQL查询的输出。

链接:https://www.learnfk.comhttps://www.learnfk.com/python-data-science/python-relational-databases.html

来源:LearnFk无涯教程网

from sqlalchemy import create_engine
import pandas as pd

data = pd.read_csv('/path/input.csv')

# 创建数据库引擎
engine = create_engine('sqlite:///:memory:')

# 将数据框存储到data_table表中
data.to_sql('data_table', engine)

# 查询所有的数据
res1 = pd.read_sql_query('SELECT * FROM data_table', engine)
print('Result 1')
print(res1)
print('')

# 分组查询
res2 = pd.read_sql_query('SELECT dept,sum(salary) FROM data_table group by dept', engine)
print('Result 2')
print(res2)

当无涯教程执行上面的代码时,它将产生以下输出。

无涯教程网

Result 1
   index  id    name  salary  start_date        dept
0      0   1    Rick  623.30  2012-01-01          IT
1      1   2     Dan  515.20  2013-09-23  Operations
2      2   3   Tusar  611.00  2014-11-15          IT
3      3   4    Ryan  729.00  2014-05-11          HR
4      4   5    Gary  843.25  2015-03-27     Finance
5      5   6   Rasmi  578.00  2013-05-21          IT
6      6   7  Learnfk  632.80  2013-07-30  Operations
7      7   8    Guru  722.50  2014-06-17     Finance

Result 2
         dept  sum(salary)
0     Finance      1565.75
1          HR       729.00
2          IT      1812.30
3  Operations      1148.00

插入数据

还可以使用pandas中提供的sql.execute函数将数据插入关系表中,在下面的代码中,将先前的csv文件作为输入数据集,将其存储在关系表中,然后 使用sql.execute插入另一个记录。

from sqlalchemy import create_engine
from pandas.io import sql

import pandas as pd

data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv')
engine = create_engine('sqlite:///:memory:')

#将数据存储在关系表中
data.to_sql('data_table', engine)

# 插入一行
sql.execute('INSERT INTO data_table VALUES(?,?,?,?,?,?)', engine, params=[('id',9,'Ruby',711.20,'2015-03-27','IT')])

# 从关系表中读取
res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine)
print(res)

当无涯教程执行上面的代码时,它将产生以下输出。

无涯教程网

   id        dept    name  salary  start_date
0   1          IT    Rick  623.30  2012-01-01
1   2  Operations     Dan  515.20  2013-09-23
2   3          IT   Tusar  611.00  2014-11-15
3   4          HR    Ryan  729.00  2014-05-11
4   5     Finance    Gary  843.25  2015-03-27
5   6          IT   Rasmi  578.00  2013-05-21
6   7  Operations  Learnfk  632.80  2013-07-30
7   8     Finance    Guru  722.50  2014-06-17
8   9          IT    Ruby  711.20  2015-03-27

删除数据

还可以使用pandas中提供的sql.execute函数将数据删除到关系表中,下面的代码根据给定的输入条件删除一行。

from sqlalchemy import create_engine
from pandas.io import sql

import pandas as pd

data = pd.read_csv('C:/Users/Rasmi/Documents/pydatasci/input.csv')
engine = create_engine('sqlite:///:memory:')
data.to_sql('data_table', engine)

sql.execute('Delete from data_table where name=(?) ', engine,  params=[('Gary')])

res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine)
print(res)

当无涯教程执行上面的代码时,它将产生以下输出。

无涯教程网

   id        dept    name  salary  start_date
0   1          IT    Rick   623.3  2012-01-01
1   2  Operations     Dan   515.2  2013-09-23
2   3          IT   Tusar   611.0  2014-11-15
3   4          HR    Ryan   729.0  2014-05-11
4   6          IT   Rasmi   578.0  2013-05-21
5   7  Operations  Learnfk   632.8  2013-07-30
6   8     Finance    Guru   722.5  2014-06-17

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

赵成的运维体系管理课 -〔赵成〕

RPC实战与核心原理 -〔何小锋〕

后端存储实战课 -〔李玥〕

职场求生攻略 -〔臧萌〕

技术管理案例课 -〔许健〕

WebAssembly入门课 -〔于航〕

实用密码学 -〔范学雷〕

如何讲好一堂课 -〔薛雨〕

结构写作力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)