使用SQLAlchemy从Pandas数据框架创建一个SQL表
在这篇文章中,我们将讨论如何使用SQLAlchemy从Pandas数据框架创建一个SQL表。
作为第一步,使用SQLAlchemy的create_engine()函数与你现有的数据库建立连接。
语法:
from sqlalchemy import create_engine
engine = create_engine(dialect+driver://username:password@host:port/database)
解释:
- dialect –DBMS的名称
- driver – 在SQLAlchemy和数据库之间移动信息的DB API的名称。
- username – 密码 – DB用户证书
- host: port – 指定主机的类型和端口号。
- database – 数据库名称
示例:
engine = create_engine(
'postgresql+psycopg2://scott:tiger@localhost:5432/mydatabase')
上面的例子创建了一个PostgreSQL专用的Dialect对象,和一个Pool对象,当收到连接请求时,在localhost:5432建立一个DBAPI连接。
SQLAlchemy包括许多最常见的数据库的方言实现,如Oracle、MS SQL、PostgreSQL、SQLite、MySQL等等。为了将数据框架加载到任何数据库,SQLAlchemy提供了一个名为to_sql()的函数。
语法: pandas.DataFrame.to_sql(table_name, engine_name, if_exists, schema, index, chunksize, dtype)
解释:
- table_name – 必须存储的表的名称
- engine_name – 连接到数据库的引擎的名称
- if_exists – 默认情况下,如果table_name已经存在,pandas会抛出一个错误。使用 “REPLACE “将这个数据集替换成旧的,或者使用 “APPEND “将数据添加到现有的表中
- index – (bool), 为表添加索引列,以唯一地识别每一行
在这个例子中,我们可以使用一个内置的、仅有内存的SQLite数据库,这是最简单的测试方法之一,但随后的程序对SQLAlchemy支持的所有其他数据库都是一样的。你可以在这里下载样本数据集。
让我们首先导入必要的数据集。现在,让我们建立与一个仅有内存的SQLite数据库的连接,并使用pysqlite驱动使其与python交互。接下来,我们将使用to_sql()函数加载要推送到SQLite数据库的数据帧,如图所示。
# import the necessary packages
import pandas
from sqlalchemy import create_engine
# Create the engine to connect to the inbuilt
# sqllite database
engine = create_engine("sqlite+pysqlite:///:memory:")
# Read data from CSV which will be
# loaded as a dataframe object
data = pandas.read_csv('superstore.csv')
# print the sample of a dataframe
data.head()
# Write data into the table in sqllite database
data.to_sql('loan_data', engine)
输出:
输出
为了检查数据框架是否作为表上传,我们可以使用SQLAlchemy查询该表,如下图所示。
from sqlalchemy import text
# establish the connection with the engine object
with engine.connect() as conn:
# let's select the column credit_history
# from the loan data table
result = conn.execute(text("SELECT Credit_History FROM loan_data"))
# print the result
for row in result:
print(row.Credit_History)
输出: