我给本科生上课的时候,推荐了datacamp的cheatsheets,具体内容可以参见课程的Github页面datascience2018。结果发现这些pdf中的很多代码不容易复制,其中一个重要的原因是其中涉及到的数据并未提供。

这里举一个例子,在importing data部分涉及到了读入关系数据库Northwind.sqlite,但是并不容易找到这个数据。

如果想要学习使用python来操作关系数据库的基础知识,可以学习DataCamp的课程introduction-to-relational-databases-in-python

首先,我们需要下载Northwind.sqlite数据,推荐从https://github.com/jpwhite3/northwind-SQLite3(关于这个数据的介绍,也可以看这里)直接下载,为了简单,我们可以选择直接下载其中的 Northwind_small.sqlite文件。

其次,我们就可以直接 create_engine

from sqlalchemy import create_engine
engine = create_engine('sqlite:///Northwind_small.sqlite')

然后,在这个关系型数据库中,有很多数据表格,我们可以读取表格的名字。

table_names = engine.table_names()
table_names
['Category',
 'Customer',
 'CustomerCustomerDemo',
 'CustomerDemographic',
 'Employee',
 'EmployeeTerritory',
 'Order',
 'OrderDetail',
 'Product',
 'Region',
 'Shipper',
 'Supplier',
 'Territory']

Querying Relational Databases

con = engine.connect()
rs = con.execute("SELECT * FROM OrderDetail")
import pandas as pd
df = pd.DataFrame(rs.fetchall())
df.columns = rs.keys()
con.close()
df[:3]
Id OrderId ProductId UnitPrice Quantity Discount
0 10248/11 10248 11 14.0 12 0.0
1 10248/42 10248 42 9.8 10 0.0
2 10248/72 10248 72 34.8 5 0.0

Using the context manager with

with engine.connect() as con:
    rs = con.execute("SELECT * FROM OrderDetail")
    df = pd.DataFrame(rs.fetchall())
    df.columns = rs.keys()

Querying relational databases with pandas

df = pd.read_sql_query("SELECT * FROM OrderDetail", engine)
df.head()
Id OrderId ProductId UnitPrice Quantity Discount
0 10248/11 10248 11 14.0 12 0.0
1 10248/42 10248 42 9.8 10 0.0
2 10248/72 10248 72 34.8 5 0.0
3 10249/14 10249 14 18.6 9 0.0
4 10249/51 10249 51 42.4 40 0.0

Leave a Comment

Show Comments