日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/4/5 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 数据库表结构转为类_Python数据科学实践 | 数据库1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,基于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?os
from?sqlalchemy?import?create_engine
from?sqlalchemy.orm?import?sessionmaker
from?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()

#?關閉session
sess.close()

在上面的代碼中,由于SQLite是基于文件的數據庫,所以,我們需要先data.db。創建data.db后,創建數據庫連接,最后創建數據庫會話實例,以及會話實例的關閉。注意,由于不同數據庫各自的特性,一些參數是某個或者某幾個數據庫獨有的,在這里由于篇幅原因,不一一列舉,讀者視自身需求查閱相關文檔即可。

9.1.2 創建數據表

第一步展示了如何構建數據庫連接并創建數據庫會話。在這一步,我們將學習如何創建數據表。

表9.1.2 需要用到的函數?

以本章開篇的兩個數據表為例,

例9.1.2?

import?os
from?sqlalchemy?import?create_engine
from?sqlalchemy.orm?import?sessionmaker,?relationship
from?sqlalchemy.ext.declarative?import?declarative_base
from?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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成人精品一区二区无码呦 | 色伊伊| 黄色av网站在线看 | h片大全| 国产黄色av网站 | av网站免费在线播放 | 男生看的污网站 | 久久九九国产 | 日本中文字幕一区二区 | 国产无遮挡免费观看视频网站 | 最新视频在线观看 | 日韩啪啪网| 亚洲国产私拍精品国模在线观看 | 日本一级理论片在线大全 | 久久久婷婷 | 午夜黄色一级片 | 国产视频最新 | 催眠美妇肉奴系统 | 亚洲欧美经典 | 加勒比综合| 黄色污污视频软件 | 女人18岁毛片 | 在线精品一区二区 | 欧美夜夜爽 | 久久久久中文 | 亚洲a v网站 | 深爱激情五月婷婷 | 天天爽夜夜爽人人爽 | 久久123 | 日本一区二区三区电影在线观看 | 日韩精品在线观看一区 | 国产一级二级三级视频 | 妞干网精品| 亚洲色图18p| 2018自拍偷拍 | 在线观看日本中文字幕 | 男男啪啪无遮挡 | 麻豆精品国产 | juliaann精品艳妇hd | 日本69式三人交 | 美女又爽又黄免费 | 国产成人久久777777 | 亚洲第一视频在线 | 自拍第一区 | a毛片在线观看 | 日韩不卡av在线 | 波多野结衣福利 | 91麻豆精品秘密入口 | 亚洲快播 | 羽月希奶水一区二区三区 | 秋霞久久精品 | 国产一区二区免费视频 | 一区二区三区国产精品视频 | 国产精品资源在线观看 | 熟女熟妇伦久久影院毛片一区二区 | 玖草在线观看 | 欧美午夜精品理论片a级按摩 | 中文字幕在线有码 | 成人免费在线 | 人妖一区二区三区 | 对白刺激国产子与伦 | 国产精品麻豆一区二区 | 亚洲卡一| 久久免费偷拍视频 | 粉嫩久久99精品久久久久久夜 | 欧美黄网在线观看 | 顶级嫩模啪啪呻吟不断好爽 | 成年人看的视频网站 | 素人一区 | 丝袜美腿av | 9久9久9久女女女九九九一九 | 久久禁 | 亚洲激情在线播放 | 五月天色综合 | 久久国产毛片 | 麻豆视频在线 | 欧美一区在线看 | 开心综合网 | 97国产视频| 黑人操白妞 | 久久97精品 | 少妇媚药按摩中文字幕 | 久久综合高清 | 国产又粗又猛 | 亚洲91久久| 国产精品不卡在线 | 四虎影库在线播放 | 91av视频| 国产高潮视频 | 国产性―交―乱―色―情人 | 精品国产乱码一区二区 | 超碰人人爱人人 | av老司机在线观看 | 成人h视频 | 亚洲国产免费视频 | 色爱亚洲| 久久先锋| 精品一区二区三区在线观看 | 主人性调教le百合sm |