日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美精产国品一二三区 | 亚洲一区二区电影网 | 日韩激情视频在线观看 | 久久精品69 | 日本成人免费网站 | 亚洲国产av一区 | 在线国产区 | 天天看片天天爽 | 婷婷伊人久久 | 国产精品无码人妻一区二区在线 | 国产又色又爽无遮挡免费动态图 | 美女黄色一级片 | a男人天堂| 亚洲一区二区三区加勒比 | 宅男视频在线免费观看 | 成人福利一区二区 | 国产成人无码精品久久二区三 | 国产探花精品在线 | 国产精品21p | 误杀1电影免费观看高清完整版 | 青青青青青青草 | 国产成人福利 | 亚洲色图88| 久久国产精品-国产精品 | 中文av字幕 | videos另类灌满极品另类 | 国产3区| 亚洲成人免费在线 | 91黄色免费| 亚洲精品一区二区三区四区五区 | 香港三级在线视频 | 美女黄视频在线观看 | 色香欲综合网 | 国产东北露脸精品视频 | 激情区| 免费视频久久 | 国产黄色网络 | 免费看日韩av | 丝袜熟女一区二区三区 | 日韩国产综合 | av在线成人 | 亚洲国产一区视频 | 亚洲av永久无码精品 | 精品久久久99 | 欧美网| 91女人18毛片水多国产 | 午夜少妇久久久久久久久 | 日韩在线播放视频 | 午夜寂寞少妇 | 日本成人免费网站 | 亚洲激情a | 亚洲高清毛片 | 国产馆av| 国产日韩欧美激情 | 漂亮人妻洗澡被公强 日日躁 | 爱情岛论坛自拍 | 中文字幕在线观看一区 | 僵尸艳谈| 欧美日韩免费一区 | 三级a视频 | 成人羞羞国产免费动态 | 国产情趣视频 | 2025中文字幕 | 中文字幕手机在线视频 | 99久久99久久精品国产片 | 91网站视频在线观看 | 亚洲精品国产成人av在线 | 三级欧美韩日大片在线看 | 日本成人一二三区 | 成人午夜精品一区二区三区 | 国产精品18 | 亚洲一区视频网站 | 亚洲少妇网 | 免费在线观看黄色网址 | 神马午夜视频 | 欧美激情一二三区 | 美女扒开让男人桶爽 | 日韩午夜剧场 | 国产传媒视频在线观看 | 亚洲免费av在线 | 亚洲午夜精品一区二区三区 | www.视频一区 | 久久精品性 | 污视频网站免费在线观看 | 国产精品福利视频 | 国产aⅴ精品一区二区三区久久 | 亚洲精品乱码久久久久久蜜桃动漫 | 精品福利影院 | 无码精品一区二区三区AV | 伊人干综合| 成年人网站免费观看 | 狠狠干香蕉 | 国产三级短视频 | 国产成人亚洲一区二区 | 欧美在线观看视频一区 | 打屁股外国网站 | 人人人干| 337p粉嫩色噜噜噜大肥臀 | 国产精品videos |