Python关系数据库

我们可以连接到关系数据库以使用Pandas库分析数据,以及另一个用于实现数据库连接的额外库。 这个软件包被命名为sqlalchemy,它提供了在python中使用的完整的SQL语言功能。

安装SQLAlchemy

使用在Pandas环境安装章中讨论的Anaconda,安装非常简单。 假设您已经按照本章的说明安装了Anaconda,请在Anaconda提示窗口中运行以下命令来安装SQLAlchemy软件包。

conda install sqlalchemy

读取关系表

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

在下面的例子中,我们通过使用已经通过读取csv文件创建的数据帧中的to_sql函数来创建关系表。 然后使用Pandasread_sql_query函数来执行和捕获来自各种SQL查询的结果。

from sqlalchemy import create_engine
import pandas as pd

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

# Create the db engine
engine = create_engine('sqlite:///:memory:')

# Store the dataframe as a table
data.to_sql('data_table', engine)

# Query 1 on the relational table
res1 = pd.read_sql_query('SELECT * FROM data_table', engine)
print('Result 1')
print(res1)
print('')

# Query 2 on the relational table
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
  1    Rick  623.30  2012-01-01          IT
  2     Dan  515.20  2013-09-23  Operations
  3   Tusar  611.00  2014-11-15          IT
  4    Ryan  729.00  2014-05-11          HR
  5    Gary  843.25  2015-03-27     Finance
  6   Rasmi  578.00  2013-05-21          IT
  7  Pranab  632.80  2013-07-30  Operations
  8    Guru  722.50  2014-06-17     Finance

Result 2
         dept  sum(salary)
    Finance      1565.75
         HR       729.00
         IT      1812.30
 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:')

# Store the Data in a relational table
data.to_sql('data_table', engine)

# Insert another row
sql.execute('INSERT INTO data_table VALUES(?,?,?,?,?,?)', engine, params=[('id',9,'Ruby',711.20,'2015-03-27','IT')])

# Read from the relational table
res = pd.read_sql_query('SELECT ID,Dept,Name,Salary,start_date FROM data_table', engine)
print(res)

执行上面示例代码,得到以下代码 -

   id        dept    name  salary  start_date
         IT    Rick  623.30  2012-01-01
 Operations     Dan  515.20  2013-09-23
         IT   Tusar  611.00  2014-11-15
         HR    Ryan  729.00  2014-05-11
    Finance    Gary  843.25  2015-03-27
         IT   Rasmi  578.00  2013-05-21
 Operations  Pranab  632.80  2013-07-30
    Finance    Guru  722.50  2014-06-17
         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
         IT    Rick   623.3  2012-01-01
 Operations     Dan   515.2  2013-09-23
         IT   Tusar   611.0  2014-11-15
         HR    Ryan   729.0  2014-05-11
         IT   Rasmi   578.0  2013-05-21
 Operations  Pranab   632.8  2013-07-30
    Finance    Guru   722.5  2014-06-17

上一篇:Python处理Excel数据

下一篇:Python NoSQL数据库

关注微信小程序
程序员编程王-随时随地学编程

扫描二维码
程序员编程王

扫一扫关注最新编程教程