大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧。本期内容主要由智亿同学与政委联合推出。

数据库永远是数据管理上最值得使用的工具。而把所收集的大量数据放入数据库之后再处理是数据科学实践项目中必不可少的一步。通过前面章节的学习,我们已经掌握了利用Python分析数据的众多模块,特别地也展示了如何利用爬虫技术爬取本书中最常使用的火锅团购数据的全过程。本章假设的分析场景是火锅团购数据被爬取后,由于数据量过大已经进入数据库保存。本章所要讲解的内容是如何通过Python与数据库交互完成数据科学实践项目。具体内容将会通过Python的SQLAIchemy模块讲解。

为什么使用SQLAlchemy?

在回答这个问题之前,得先回答另一个问题:为什么要使用SQL?

试想一下,在第七章网络爬虫中,我们直接使用excel、txt和csv文件作为数据存储的载体,这样做会遇到什么问题?

首先,当数据结构非常复杂的时候,无论用excel、txt还是csv,都无法比较良好的维护数据结构。比如,以下数据结构:

[    (311, "老北京涮羊肉", '11:00-21:00', [['周一', '满60减10'], ['周二', '满100减20']]),    (312, "大龙燚火锅", '10:00-22:00', [['周一', '满60减10'], ['周二', '满100减20']]),    (313, "一尊皇牛", '00:00-24:00', [['周一', '满80减10'], ['周二', '满100减10']]),]

上面的数据结构表示:三家店的店ID、店名、营业时间、每天的优惠活动(这里只为说明问题,列举两天)。上面的数据结构存在明显不合理:一家店只有一个店名和营业时间,只用一行数据就可以表示一家店的信息了;但是,一家店会有多个优惠活动,这必须要用多行数据才可以表示。也就是说,这里的数据结构既表示了1对1的关系,也表示了1对N的关系。

此时,店家基本信息和优惠活动放在一张表中就明显不合适了,需要至少两张表才可以比较好的维护。假如用excel文件,店名必须要输入N遍(试想一下有20~30个优惠券活动,那么店名就得重复输入至少20次),这非常不方便,而且也不利于数据结构的查看。

但是,如果将这个数据结构用Python的class实例来表示,就非常容易地能看出数据表的结构了:

class ShopBasic(Base):    # 表的名字:    __tablename__ = 'basic'

    # 表的结构:    # 商户的ID,名字与营业时间    id = Column(Integer, primary_key=True, autoincrement=True)     name = Column(String(50))    time = Column(String(20), nullable=True)

class ShopCoupon(Base):    # 表的名字:    __tablename__ = 'coupon'    # 团购优惠的ID,名字,优惠时间与对应的商户的ID    id = Column(Integer, primary_key=True, autoincrement=True)    day = Column(String(5))    coupon = Column(String(30))    # 添加外键    shop_id = Column(Integer, ForeignKey('shopbasic.id'))

其次,当数据量比较大的时候,就需要频繁地对数据进行读取。如果使用excel进行数据管理,会十分消耗计算机性能,且大大降低了运行效率。这时候,就需要使用SQL来进行数据维护了。

在明白为什么要使用SQL后,就可以回答为什么需要SQLAlchemy了。编写原生的SQL语句学习成本比较高,如果能有工具可以实现直接用Python语法写SQL语句的话,岂不美哉!ORM(Object-relational mapping)就是专门为了解决这个问题而创造的,SQLAlchemy就是其中的典型代表。

9.1 初级篇——SQLAlchemy的基本使用

在明白为什么需要使用SQLAlchemy后,我们来看看如何使用SQLAlchemy。本章运行环境为:Python3.5.2,SQLAlchemy1.2.16

9.1.1连接数据库

SQLAlchemy支持多种主流的SQL,如PostgreSQL、MySQL、SQLite、Oracle、SQL Server。由于很多嵌入型的应用都自带SQLite数据库,所以,在读者看到此书时,很可能电脑上已经安装了这个数据库(没有安装的读者请自行到官网安装https://www.sqlite.org/download.html)。为方便起见,本书以SQLite对SQLAlchemy进行讲解,其他类型的数据库会有细微区别,使用时根据提示信息进行查阅即可。

表9.1.1 需要用到的函数

例9.1.1 示例代码

import osfrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerfrom sqlalchemy.ext.declarative import declarative_base

# 改成你存放数据库文件的路径,注意data.db需要提前创建db_file = r'E:\pythonProjects\cluebearpython\chapter11\data'engine = create_engine(name_or_url='sqlite:///{}'.format(os.path.join(db_file, 'data.db')))DBSession = sessionmaker(bind=engine)# 创建数据库会话实例sess = DBSession()

# 关闭sessionsess.close()

在上面的代码中,由于SQLite是基于文件的数据库,所以,我们需要先data.db。创建data.db后,创建数据库连接,最后创建数据库会话实例,以及会话实例的关闭。注意,由于不同数据库各自的特性,一些参数是某个或者某几个数据库独有的,在这里由于篇幅原因,不一一列举,读者视自身需求查阅相关文档即可。

9.1.2 创建数据表

第一步展示了如何构建数据库连接并创建数据库会话。在这一步,我们将学习如何创建数据表。

表9.1.2 需要用到的函数 

以本章开篇的两个数据表为例,

例9.1.2 

import osfrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmaker, relationshipfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, String, Integer, ForeignKey

# 改成你存放数据库文件的路径,注意data.db需要提前创建db_file = r'E:\pythonProjects\cluebearpython\chapter11\data'engine = create_engine('sqlite:///{}'.format(os.path.join(db_file, 'data.db')), encoding='utf8')DBSession = sessionmaker(bind=engine)# 创建数据库会话实例sess = DBSession()

Base = declarative_base()class ShopBasic(Base):    # 表的名字:    __tablename__ = 'basic'

    # 表的结构:    id = Column(Integer, primary_key=True, autoincrement=True)    name = Column(String(50))    time = Column(String(20), nullable=True)

class ShopCoupon(Base):    # 表的名字:    __tablename__ = 'coupon'

    id = Column(Integer, primary_key=True, autoincrement=True)    day = Column(String(5))    coupon = Column(String(30))

# 会自动检查表是否存在,如果表不存在,则创建;如果已经存在,则忽略,也可以手动注释,增强可读性。Base.metadata.create_all(engine)

在上面的代码中,截止到创建数据库会话的部分都不变。之后:

1. 先用声明式方法,显式关联数据库表和Python中的Class对象;

2. 然后让需要创建或者关联的表的类继承Base对象,每个类中有两个必须声明的部分:表的名字,这样才能让程序正确关联相应的数据表;表的字段。如果字段未创建,用Column方法创建字段的相关参数;如果字段已经创建,则在Column中指定字段名即可。

3. 最后,调用Base.metadata.create_all()方法创建以上两张表。

至此,数据表的创建也已经完成。通过这种声明式创建、关联表结构的方式,能够让我们非常清楚的了解数据表的结构,并在此基础上进行增删改查。

好了,今天就讲到这里。

▼往期精彩回顾▼内容索引 | Python 数据科学实践

“京东购买链接”

【京东参加每满100减50的活动 截止到12号】

快进入慕课平台学习吧

python 数据库表结构转为类_Python数据科学实践 | 数据库1相关推荐

  1. python 数据库表结构转为类_Python sql server和postgresql的表结构转换

    通过Python修改Postgresql的表格:添加Column当繁华落尽时间破碎,我在落败的残花前看见了一地忧伤,所有海誓山盟终不及命运的一夕,转变繁华尽头皆是残缺. 我想通过Python修改Pos ...

  2. python 数据库表结构转为类_顺序表数据结构在python中的应用

    数据结构不仅仅指的数据值在逻辑上的结构,更有在存储空间上的位置结构,顺序表,故名思意是有一定顺序的数据结构.顺序表最基本模型如图: 对于基本布局顺序表而言,它存储相同单元大小并且在内存地址上连续的数据 ...

  3. ThinkPHP 数据库表结构处理类(简单实用)

    <?php /* *mysql表结构处理类 *创建数据表,增加,编辑,删除表中字段 * */ classMysqlManage{ /* *创建数据库,并且主键是aid *table要查询的表名 ...

  4. thinkphp mysql desc table_数据库表结构_ThinkPHP 数据库表结构处理类(简单实用)-云栖社区-阿里云...

    /* *mysql表结构处理类 *创建数据表,增加,编辑,删除表中字段 * */ classMysqlManage{ /* *创建数据库,并且主键是aid *table要查询的表名 */ functi ...

  5. 《实时雨水情数据库表结构与标识符标准》(2005)水情数据库建库脚本

    实时雨水情数据库表结构与标识符标准 Standard for Structure and Identifier in Real-time Hydrological Information Databa ...

  6. python 分组箱线图_Python数据科学实践 | 绘图模块4

    点击关注了解更多精彩内容!! 大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧.本期内容主要由智亿同学与政委联合推出. 本次将继续学习如何用Plotly绘制更加美观的统计图.具体的, ...

  7. .net里鼠标选中的text数据怎么获取_Python数据科学实践 | 爬虫1

    点击上方蓝色字体,关注我们 大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧.本期内容主要由智亿同学与政委联合推出. 前面几章大家学习了如何利用Python处理与清洗数据,如何探索性 ...

  8. 根据数据库表gengxin实体类_Python学习第四十八天记录打call:SQLALchemy操作MySQL关系型数据库...

    1.SQLALchemy使用 安装 pip install sqlalchemy: SQLAlchemy是Python编程语言下的一款开源软件,是PythonSQL工具包和对象关系映射器,它为应用程序 ...

  9. python 统计组合用什么库_Python数据科学,用这些库就够了

    为了方便学习,本文列出的20个Python库将按领域进行分类,有些你可能并不熟悉,但是真的能提高你的模型算法实现效率,多一点尝试,多一些努力! ▌核心库和统计数据 1. NumPy (Commits: ...

最新文章

  1. HarmonyOS Text超出部分末尾显示...
  2. 如何让人大致理解RxJava思想:第一节 初步理解RxJava
  3. 软工实践第三次作业-原型设计
  4. s5pv210 音频播放问题 MPlayer移植
  5. Hbase Compaction 源码分析 - CompactSplitThread 线程池选择
  6. cad在线转低版本_【设计专业干货】史上最齐全的CAD大全
  7. 记录C++ Builder 6.0开发过程中的一个linker error
  8. 详解Python序列解包(3)
  9. ThreadLocal设计
  10. 51job简历如何导出pdf格式
  11. 酷比魔方iwork8刷机shell_酷比魔方iwork8旗舰版刷机教程及固件上线
  12. 思科认证华为认证的区别
  13. 包政讲营销录音(1)
  14. JLINK在线调试——软件调试方法与技巧
  15. RationalDMIS 2020高级编程:快速3-2-1构建坐标系
  16. java中 continue outer, break inner 简解
  17. 计算机西方经济学试题,西方经济学的习题与答案
  18. 2024南京大学计算机考研信息汇总
  19. gb酱油和gbt酱油哪个好_酱油那个gb18186是纯酿造的吗
  20. 验证码----svg-captcha

热门文章

  1. springMVC(一) --前端控制器(DispatcherServlet)的作用
  2. 关于随机验证码的一些小见解。
  3. Python的os.walk()方法详细讲解
  4. 『TensorFlow』专题汇总
  5. 三问JavaBean
  6. 函数atof,atoi,atol,strtod,strtol,strtoul 描述
  7. ionic一些常见问题及方法
  8. EJB(四)JPA 分布式事务处理
  9. 锋利的JQuery学习笔记01
  10. XPath访问任意深度的XML数据