如何在Python中把pandas DataFrame转换成SQL
在这篇文章中,我们的目标是将数据框架转换成SQL数据库,然后尝试使用SQL查询或通过表从SQL数据库中读取内容
为了在Python中处理SQL,我们需要使用下面提到的命令,在cmd中运行它来安装sqlalchemy库。
pip install sqlalchemy
有必要创建一个pandas数据框架来进一步进行。
# import pandas library
import pandas as pd
# create a dataframe
# object from dictionary
dataset = pd.DataFrame({'Names':['Abhinav','Aryan',
'Manthan'],
'DOB' : ['10/01/2009','24/03/2009',
'28/02/2009']})
# show the dataframe
print(dataset)
输出 :
Names DOB
0 Abhinav 10/01/2009
1 Aryan 24/03/2009
2 Manthan 28/02/2009
在创建数据集后,我们需要将数据框连接到数据库支持,这是为sqlite3.Connection对象提供的。
#importing sql library
from sqlalchemy import create_engine
# create a reference
# for sql library
engine = create_engine('sqlite://',
echo = False)
# attach the data frame to the sql
# with a name of the table
# as "Employee_Data"
dataset.to_sql('Employee_Data',
con = engine)
# show the complete data
# from Employee_Data table
print(engine.execute("SELECT * FROM Employee_Data").fetchall())
输出 :
[(0, 'Abhinav', '10/01/2009'), (1, 'Aryan', '24/03/2009'),
(2, 'Manthan', '28/02/2009')]
将数据添加到数据库后,我们就可以以记录的形式看到它。数据也可以被追加到先前创建的数据库中,如下图所示。
# Create a dataframe
# object from dictionary
df1 = pd.DataFrame({'Names' : ['Sonia', 'Priya'],
'DOB':['18/10/2009','14/06/2009']})
# appending new data frame
# to existing data frame
df1.to_sql('Employee_Data',
con = engine,
if_exists = 'append')
# run a sql query
print(engine.execute("SELECT * FROM Employee_Data").fetchall())
输出 :
[(0, 'Abhinav', '10/01/2009'), (1, 'Aryan', '24/03/2009'),
(2, 'Manthan', '28/02/2009'), (0, 'Sonia', '18/10/2009'),
(1, 'Priya', '14/06/2009')]
从上面的例子中可以看出,尽管数据被追加了,但只有当一个新的数据帧被追加时,索引才会从0开始。一个数据帧可以被转移到SQL数据库中,同样,数据帧也可以从SQL数据库中被读取。
# reading the sql database
# with index "Names"
df2 = pd.read_sql('Employee_Data',
con = engine,
index_col = 'Names',
parse_dates = ['DOB'])
# show the dataframe
print(df2)
# print new line
print()
# show the type of df2
print(type(df2))
输出 :
id DOB
Names
Sonia 0 2009-10-18
Priya 1 2009-06-14
我们还可以访问数据库中的某一列而不是整个表。
# acccesing only a particular
# column from the database
df3 = pd.read_sql('Employee_Data',
con = engine,
columns = ["Names"])
# show the data
print(df3)
输出 :
Names
0 Sonia
1 Priya
如果我们想让数据库中的数据以列表的形式出现,这也是可能的。
# get a particular column
# from a database in the
# form of list
df4 = pd.read_sql('Employee_Data',
con = engine,
index_col = 'Names',
columns = ["Names"])
# show the data
print(df4)
输出 :
Empty DataFrame
Columns: []
Index: [Sonia, Priya]
可以使用read_sql_query()命令在python中编写SQL查询,并传递适当的SQL查询和连接对象。
parse_dates:这个参数有助于将原来从我们这边传递的日期转换成真正的日期格式。
# run a sql query in the database
# and store result in a dataframe
df5 = pd.read_sql_query('Select DOB from Employee_Data',
con = engine,
parse_dates = ['DOB'])
# show the dataframe
print(df5)
输出 :
DOB
0 2009-10-18
1 2009-06-14